| @@ -61,9 +61,8 @@ | ||
| 61 | 61 | '_metasync_seo_title', |
| 62 | 62 | '_metasync_seo_desc', |
| 63 | 63 | '_metasync_metatitle', |
| 64 | 64 | '_metasync_metadesc', |
| 65 | - '_metasync_metakeywords', | |
| 66 | 65 | '_metasync_robots_index', |
| 67 | 66 | '_metasync_robots_advanced', |
| 68 | 67 | '_metasync_og_title', |
| 69 | 68 | '_metasync_og_description', |
| @@ -81,9 +80,8 @@ | ||
| 81 | 80 | '_metasync_otto_og_description', |
| 82 | 81 | '_metasync_otto_twitter_title', |
| 83 | 82 | '_metasync_otto_twitter_description', |
| 84 | 83 | '_metasync_otto_keywords', |
| 85 | - '_metasync_otto_canonical', | |
| 86 | 84 | ]; |
| 87 | 85 | |
| 88 | 86 | /** |
| 89 | 87 | * Internal OTTO meta keys mapped to the OTTO Persistence setting that |
| @@ -104,9 +102,8 @@ | ||
| 104 | 102 | const OTTO_PERSISTENCE_KEYS = [ |
| 105 | 103 | '_metasync_otto_title' => 'meta_title', |
| 106 | 104 | '_metasync_otto_description' => 'meta_description', |
| 107 | 105 | '_metasync_otto_keywords' => 'meta_keywords', |
| 108 | - '_metasync_metakeywords' => 'meta_keywords', | |
| 109 | 106 | '_metasync_otto_og_title' => 'og_title', |
| 110 | 107 | '_metasync_otto_og_description' => 'og_description', |
| 111 | 108 | '_metasync_otto_twitter_title' => 'twitter_title', |
| 112 | 109 | '_metasync_otto_twitter_description' => 'twitter_description', |
| @@ -256,9 +253,8 @@ | ||
| 256 | 253 | '_metasync_otto_og_description' => 'og_desc', |
| 257 | 254 | '_metasync_otto_twitter_title' => 'twitter_title', |
| 258 | 255 | '_metasync_otto_twitter_description' => 'twitter_desc', |
| 259 | 256 | '_metasync_otto_keywords' => 'focus_keyword', |
| 260 | - '_metasync_metakeywords' => 'focus_keyword', | |
| 261 | 257 | // Legacy meta box keys → rebuild JSON |
| 262 | 258 | 'metasync_common_robots' => '_legacy_robots_to_json', |
| 263 | 259 | 'metasync_advance_robots' => '_legacy_robots_to_json', |
| 264 | 260 | ]; |
| @@ -563,13 +559,9 @@ | ||
| 563 | 559 | // Canonical, focus keyword, breadcrumb |
| 564 | 560 | // Canonical is validated at the source so a corrupted value ("Array") |
| 565 | 561 | // never propagates into Yoast/RankMath/AIOSEO storage. |
| 566 | 562 | $data['canonical'] = Metasync_Canonical_Sanitizer::sanitize($get('_metasync_canonical_url')); |
| 567 | - // The keyword takes its order from the resolver — customer value, then | |
| 568 | - // OTTO's volatile tier, then OTTO's persisted tier — so the persistence | |
| 569 | - // gating in $first() reaches the persisted copy too. Previously the | |
| 570 | - // persisted copy sat on the customer key, outranking the live one. | |
| 571 | - $data['focus_keyword'] = $first(...Metasync_Seo_Precedence::keys(Metasync_Seo_Precedence::FIELD_FOCUS_KEYWORD)); | |
| 563 | + $data['focus_keyword'] = $first('_metasync_focus_keyword', '_metasync_otto_keywords'); | |
| 572 | 564 | $data['breadcrumb_title'] = $get('_metasync_breadcrumb_title'); |
| 573 | 565 | |
| 574 | 566 | return $this->apply_feature_flags_to_payload($data); |
| 575 | 567 | } |