Description
Keeps an SEO title and a meta description for each published page and post, and prints them
in the page head: the title in the title tag, the description in one meta description tag.
A page with no SEO title keeps the title WordPress gives it. A page with no description gets
no description tag.
It can also keep one business schema block for a page or post: a schema.org LocalBusiness (or
a more exact kind, such as Plumber) with the business’s name, phone, address, area served,
website and profile links. It prints it as one JSON-LD script in that page’s head. Nothing
else can go in the block: no reviews or ratings, no other kinds of schema.
It is made for sites with no other SEO plugin. While another SEO plugin is active, or a theme
with SEO built in, it prints no title or description. A theme that prints its own title tag
stops the title and description only.
The business block works with no SEO plugin, printed as its own script, and with Yoast SEO
(version 20 or later, without Yoast Local SEO), placed inside Yoast’s own schema through
Yoast’s public filter. When Yoast’s schema names the same business, that entry is given the
business type, phone, address and area, and keeps its own name exactly as written; otherwise the
block is added as its own entry. Names count as the same when they differ only in capitals, in
apostrophes, full stops or commas, in “&” against “and”, in spacing, or by one closing Ltd,
Limited, LLP or PLC. It is left out whenever the page’s schema already holds a local business, or
Yoast’s entry names a different business, or already has a phone, address or area. With any other SEO
plugin or an SEO theme, it prints no block and will not store one.
It does not import anything from another SEO plugin.
It never changes a page’s content, its own title, a menu or a theme file. It adds no admin
screen and contacts no outside server.
Switched off, it prints nothing and keeps what it stored. Deleted, everything it stored is
removed. A page or post deleted for good takes its business block with it.
Asked for its fields by page or post id, it reads each one directly, so another plugin’s
query filter cannot leave one out. The full list, asked without ids, goes through WordPress’s
own query: with a language plugin it may hold one language only.
The service that fills it in
This plugin is the WordPress side of CitedBy (https://citedby.co.uk), a paid service for UK
local businesses. CitedBy works out the SEO title, meta description and business block for a
page, and sends them to this plugin through the WordPress REST API. It uses an application
password that an administrator of the site creates and gives to CitedBy.
CitedBy calls the site; the plugin never calls CitedBy or any other outside server. What CitedBy
sends: a page or post id and the title, description or business block for it. What it reads
back: what the plugin holds for that page, its version, and whether another SEO plugin stops it
printing.
Any tool holding an administrator’s application password can use the same calls. CitedBy is the
one it is made for.
CitedBy’s terms: https://citedby.co.uk/terms
CitedBy’s privacy policy: https://citedby.co.uk/privacy
FAQ
-
How are the fields filled in?
-
Through two REST API calls at
/wp-json/seo-fields/v1/seo_fields: GET reads the stored
fields, POST writes them. Both need a user who can manage the site’s options; a write also
needs that user to be allowed to edit the page or post. They are meant for CitedBy, which the site
owner connects with an administrator’s application password. The plugin adds no screen of its
own. -
What if a field is changed while a write is on its way?
-
A write can say what it expects each field to hold now. The field is then written only while it
still holds exactly that, checked by the database in the same step as the write. If anyone has
changed it since, nothing is written and the answer says so, with what the fields hold now.
The read saysconditional_write: truewhen the plugin supports this. -
How is the business block filled in?
-
Through
/wp-json/seo-fields/v1/schema, with the same rights as the fields. Every write names
the revision it read, and is done only while the block still holds exactly that, checked by the
database in the same step as the write. Each page’s block is one row in the options table,
namedcitedby_seo_fields_schema_and the page id, so two writers filling an empty block at the same
moment cannot both win. An undo puts back the block that write replaced, or removes the block
if that write created it, and only while the block still holds exactly what that write stored. -
Which pages can hold them?
-
Published pages and posts with no password. A page WordPress never shows as itself, such as a
WooCommerce shop page, is refused, since nothing stored for it could print. -
Does it work on a multisite network?
-
Not in this version. On a network it registers nothing and prints nothing.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“CitedBy SEO Fields” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “CitedBy SEO Fields” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Change log
0.4.0
- 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.
- The title and description are printed with WordPress’s own escaping; the business block with wp_json_encode’s own escaping kept.
- Prints nothing while this plugin under its old name, SEO Fields, is active.
0.3.3
- Preserve empty schema revisions after Undo and refuse stale retries.
- Preserve recovery of earlier changes; new approvals only fill an empty schema slot.