{"id":384926,"date":"2026-10-12T18:44:18","date_gmt":"2026-10-12T18:44:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/citedby-seo-fields\/"},"modified":"2026-10-12T18:43:59","modified_gmt":"2026-10-12T18:43:59","slug":"citedby-seo-fields","status":"publish","type":"plugin","link":"https:\/\/cy.wordpress.org\/plugins\/citedby-seo-fields\/","author":23576540,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.4.0","stable_tag":"0.4.0","tested":"7.1.3","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"CitedBy SEO Fields","header_author":"CitedBy","header_description":"Keeps an SEO title, a meta description and one business schema block for each page and post, and prints them in the page head. Made for sites with no other SEO plugin: while one is active, this prints nothing. It imports nothing from another plugin.","assets_banners_color":"","last_updated":"2026-10-12 18:43:59","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/citedby.co.uk","rating":0,"author_block_rating":0,"active_installs":0,"downloads":50,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","faq","changelog"],"tags":{"0.4.0":{"tag":"0.4.0","author":"seofields","date":"2026-10-12 18:43:59","revision":3742330}},"upgrade_notice":{"0.4.0":"<p>Every name the plugin uses now starts with citedby_seo_fields_. Values stored by earlier versions are moved to the new names once, on the first visit after the update. Do not go back to 0.3.3 afterwards: it reads only the old names.<\/p>","0.3.3":"<p>Update the CitedBy application before installing this plugin version. Schema contract 3 prevents delayed retries from bringing back a change after Undo. Earlier applied changes remain recoverable.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.4.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[37556,5777,1117,186,1460],"plugin_category":[55],"plugin_contributors":[286253],"plugin_business_model":[],"class_list":["post-384926","plugin","type-plugin","status-publish","hentry","plugin_tags-local-business","plugin_tags-meta-description","plugin_tags-schema","plugin_tags-seo","plugin_tags-title","plugin_category-seo-and-marketing","plugin_contributors-seofields","plugin_committers-seofields"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/citedby-seo-fields.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Keeps an SEO title and a meta description for each published page and post, and prints them\nin the page head: the title in the title tag, the description in one meta description tag.\nA page with no SEO title keeps the title WordPress gives it. A page with no description gets\nno description tag.<\/p>\n\n<p>It can also keep one business schema block for a page or post: a schema.org LocalBusiness (or\na more exact kind, such as Plumber) with the business's name, phone, address, area served,\nwebsite and profile links. It prints it as one JSON-LD script in that page's head. Nothing\nelse can go in the block: no reviews or ratings, no other kinds of schema.<\/p>\n\n<p>It is made for sites with no other SEO plugin. While another SEO plugin is active, or a theme\nwith SEO built in, it prints no title or description. A theme that prints its own title tag\nstops the title and description only.<\/p>\n\n<p>The business block works with no SEO plugin, printed as its own script, and with Yoast SEO\n(version 20 or later, without Yoast Local SEO), placed inside Yoast's own schema through\nYoast's public filter. When Yoast's schema names the same business, that entry is given the\nbusiness type, phone, address and area, and keeps its own name exactly as written; otherwise the\nblock is added as its own entry. Names count as the same when they differ only in capitals, in\napostrophes, full stops or commas, in \"&amp;\" against \"and\", in spacing, or by one closing Ltd,\nLimited, LLP or PLC. It is left out whenever the page's schema already holds a local business, or\nYoast's entry names a different business, or already has a phone, address or area. With any other SEO\nplugin or an SEO theme, it prints no block and will not store one.<\/p>\n\n<p>It does not import anything from another SEO plugin.<\/p>\n\n<p>It never changes a page's content, its own title, a menu or a theme file. It adds no admin\nscreen and contacts no outside server.<\/p>\n\n<p>Switched off, it prints nothing and keeps what it stored. Deleted, everything it stored is\nremoved. A page or post deleted for good takes its business block with it.<\/p>\n\n<p>Asked for its fields by page or post id, it reads each one directly, so another plugin's\nquery filter cannot leave one out. The full list, asked without ids, goes through WordPress's\nown query: with a language plugin it may hold one language only.<\/p>\n\n<h3>The service that fills it in<\/h3>\n\n<p>This plugin is the WordPress side of CitedBy (https:\/\/citedby.co.uk), a paid service for UK\nlocal businesses. CitedBy works out the SEO title, meta description and business block for a\npage, and sends them to this plugin through the WordPress REST API. It uses an application\npassword that an administrator of the site creates and gives to CitedBy.<\/p>\n\n<p>CitedBy calls the site; the plugin never calls CitedBy or any other outside server. What CitedBy\nsends: a page or post id and the title, description or business block for it. What it reads\nback: what the plugin holds for that page, its version, and whether another SEO plugin stops it\nprinting.<\/p>\n\n<p>Any tool holding an administrator's application password can use the same calls. CitedBy is the\none it is made for.<\/p>\n\n<p>CitedBy's terms: https:\/\/citedby.co.uk\/terms\nCitedBy's privacy policy: https:\/\/citedby.co.uk\/privacy<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20are%20the%20fields%20filled%20in%3F\"><h3>How are the fields filled in?<\/h3><\/dt>\n<dd><p>Through two REST API calls at <code>\/wp-json\/seo-fields\/v1\/seo_fields<\/code>: GET reads the stored\nfields, POST writes them. Both need a user who can manage the site's options; a write also\nneeds that user to be allowed to edit the page or post. They are meant for CitedBy, which the site\nowner connects with an administrator's application password. The plugin adds no screen of its\nown.<\/p><\/dd>\n<dt id=\"what%20if%20a%20field%20is%20changed%20while%20a%20write%20is%20on%20its%20way%3F\"><h3>What if a field is changed while a write is on its way?<\/h3><\/dt>\n<dd><p>A write can say what it expects each field to hold now. The field is then written only while it\nstill holds exactly that, checked by the database in the same step as the write. If anyone has\nchanged it since, nothing is written and the answer says so, with what the fields hold now.\nThe read says <code>conditional_write: true<\/code> when the plugin supports this.<\/p><\/dd>\n<dt id=\"how%20is%20the%20business%20block%20filled%20in%3F\"><h3>How is the business block filled in?<\/h3><\/dt>\n<dd><p>Through <code>\/wp-json\/seo-fields\/v1\/schema<\/code>, with the same rights as the fields. Every write names\nthe revision it read, and is done only while the block still holds exactly that, checked by the\ndatabase in the same step as the write. Each page's block is one row in the options table,\nnamed <code>citedby_seo_fields_schema_<\/code> and the page id, so two writers filling an empty block at the same\nmoment cannot both win. An undo puts back the block that write replaced, or removes the block\nif that write created it, and only while the block still holds exactly what that write stored.<\/p><\/dd>\n<dt id=\"which%20pages%20can%20hold%20them%3F\"><h3>Which pages can hold them?<\/h3><\/dt>\n<dd><p>Published pages and posts with no password. A page WordPress never shows as itself, such as a\nWooCommerce shop page, is refused, since nothing stored for it could print.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20a%20multisite%20network%3F\"><h3>Does it work on a multisite network?<\/h3><\/dt>\n<dd><p>Not in this version. On a network it registers nothing and prints nothing.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Every function, constant and stored name starts with citedby_seo_fields_, so none can clash with another plugin. Values stored by earlier versions are moved to the new names once.<\/li>\n<li>The title and description are printed with WordPress's own escaping; the business block with wp_json_encode's own escaping kept.<\/li>\n<li>Prints nothing while this plugin under its old name, SEO Fields, is active.<\/li>\n<\/ul>\n\n<h4>0.3.3<\/h4>\n\n<ul>\n<li>Preserve empty schema revisions after Undo and refuse stale retries.<\/li>\n<li>Preserve recovery of earlier changes; new approvals only fill an empty schema slot.<\/li>\n<\/ul>","raw_excerpt":"An SEO title, a meta description and a business schema block for each page and post, filled in by CitedBy.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/384926","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=384926"}],"author":[{"embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/seofields"}],"wp:attachment":[{"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=384926"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=384926"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=384926"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=384926"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=384926"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=384926"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}