{"id":351593,"date":"2026-08-10T16:15:48","date_gmt":"2026-08-10T16:15:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/datanephew-seo-bridge\/"},"modified":"2026-08-10T16:15:17","modified_gmt":"2026-08-10T16:15:17","slug":"datanephew-seo-bridge","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/datanephew-seo-bridge\/","author":23546250,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0.3","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"datanephew SEO Bridge","header_author":"datanephew","header_description":"Registers Yoast SEO and Rank Math title, meta description and focus keyword post meta so the core WordPress REST API accepts writes to them.","assets_banners_color":"","last_updated":"2026-08-10 16:15:17","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":32,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"datanephew","date":"2026-08-10 16:15:17"}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[1556,141196,683,23853,186],"plugin_category":[55],"plugin_contributors":[275055],"plugin_business_model":[],"class_list":["post-351593","plugin","type-plugin","status-publish","hentry","plugin_tags-api","plugin_tags-headless","plugin_tags-meta","plugin_tags-rest-api","plugin_tags-seo","plugin_category-seo-and-marketing","plugin_contributors-datanephew","plugin_committers-datanephew"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/datanephew-seo-bridge.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Yoast SEO and Rank Math store the SEO title, meta description and focus keyword as post meta, but do not register every one of those keys for the REST API. The core REST controller silently discards meta keys it does not know about, so a request that writes them returns 200 and changes nothing. This plugin registers those keys on the <code>post<\/code> and <code>page<\/code> post types, with an explicit sanitize callback and an auth callback that checks the caller can edit the post in question, so the standard <code>\/wp\/v2\/posts<\/code> and <code>\/wp\/v2\/pages<\/code> endpoints accept them. It adds no write routes of its own and relies on WordPress's own capability checks. A key that the SEO plugin already exposes to REST is left exactly as that plugin registered it.<\/p>\n\n<p>This plugin was built for <a href=\"https:\/\/datanephew.com\">datanephew<\/a>, which edits SEO metadata over the WordPress REST API, but it is not tied to it and does not require it. It is equally useful to anyone \u2014 a headless front end, an editorial script, another integration \u2014 that needs those fields writable over REST. It collects no data, makes no outbound requests, adds no settings page, creates no database tables, and displays nothing in the WordPress admin.<\/p>\n\n<p>All in One SEO is detected and reported, but its fields are not bridged, and it does not need to be. AIOSEO keeps SEO titles and descriptions in its own database table rather than in post meta, so registering post meta keys for it would not change what AIOSEO reads. AIOSEO 4.9.8 and later ship their own REST API for these fields on every plan including the free one, so an AIOSEO site can already write them through the core endpoints without this plugin.<\/p>\n\n<h4>What it registers<\/h4>\n\n<p>When Yoast SEO is active, for both posts and pages:<\/p>\n\n<ul>\n<li><code>_yoast_wpseo_title<\/code><\/li>\n<li><code>_yoast_wpseo_metadesc<\/code><\/li>\n<li><code>_yoast_wpseo_focuskw<\/code><\/li>\n<\/ul>\n\n<p>When Rank Math is active, for both posts and pages:<\/p>\n\n<ul>\n<li><code>rank_math_title<\/code><\/li>\n<li><code>rank_math_description<\/code><\/li>\n<li><code>rank_math_focus_keyword<\/code><\/li>\n<\/ul>\n\n<p>With none of the supported SEO plugins active, the plugin registers nothing.<\/p>\n\n<h4>Status endpoint<\/h4>\n\n<pre><code>GET \/wp-json\/datanephew-seo-bridge\/v1\/status returns the plugin version, which SEO plugins were detected, and which meta keys were registered. It requires an authenticated user with the `edit_posts` capability and reports nothing else about the site.\n<\/code><\/pre>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>datanephew-seo-bridge<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install it from the Plugins screen in WordPress.<\/li>\n<li>Activate the plugin through the Plugins screen.<\/li>\n<\/ol>\n\n<p>There is nothing to configure. The plugin detects Yoast SEO and Rank Math automatically and registers their meta keys when they are active.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20change%20who%20can%20edit%20seo%20fields%3F\"><h3>Does this change who can edit SEO fields?<\/h3><\/dt>\n<dd><p>No. Each registered meta key carries an auth callback that checks <code>edit_post<\/code> for the specific post being written, which is the same capability the core REST API requires to edit that post.<\/p><\/dd>\n<dt id=\"does%20it%20send%20anything%20anywhere%3F\"><h3>Does it send anything anywhere?<\/h3><\/dt>\n<dd><p>No. The plugin makes no outbound HTTP requests of any kind.<\/p><\/dd>\n<dt id=\"why%20is%20all%20in%20one%20seo%20detected%20but%20not%20bridged%3F\"><h3>Why is All in One SEO detected but not bridged?<\/h3><\/dt>\n<dd><p>Two reasons. AIOSEO stores SEO titles and descriptions in its own database table rather than in post meta, so registering post meta keys would have no effect on what AIOSEO reads. And it needs no help: since version 4.9.8 AIOSEO includes its own REST API for these fields on every plan, including the free version, so those fields are already writable through the core endpoints on an AIOSEO site. This plugin reports AIOSEO in its status endpoint so an integration can tell the difference, and otherwise leaves it alone.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release. Registers Yoast SEO and Rank Math title, description and focus keyword meta for posts and pages, and adds a read-only status endpoint.<\/li>\n<\/ul>","raw_excerpt":"Makes Yoast SEO and Rank Math title, meta description and focus keyword fields writable through the core WordPress REST API.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/351593","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=351593"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/datanephew"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=351593"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=351593"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=351593"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=351593"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=351593"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=351593"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}