Black Friday: 50% off. Your first year on any annual plan, until 1 December. See the dealFirst year on annual plans, until 1 December
WPClientHub V2 is live. Fewer plugins on your client sites: caching, forms and image optimization now come built into WPClientHub One. See what’s newCaching, forms and images, built in. See what’s new
Sign in Start free

← Docs  /  SEO Health & AI Visibility

SEO management

Updated 2026-10-08

Per-page titles, descriptions, canonical, noindex and social fields in Yoast, Rank Math, AIOSEO or SEOPress’s own storage; redirects, 404s, robots, schema.

Browse documentation

What it does

SEO Health scores a site; SEO management lets you change it from the same tab. It is available on Studio and above (the Agency trial includes it) and needs WPClientHub One 2.0 or newer on the site. The SEO tab gains four sections next to Health:

  • Pages — every published page, post and custom post type with its title and meta description as the page actually gets them, length meters, noindex/nofollow, canonical and social-sharing fields. Edit one page inline, change many at once, or let Draft with AI write a title and description from the page’s own text (one AI credit; never saved by itself).
  • Redirects & 404s — 301/302/307/308/410 redirects with hit counts, CSV import and export, and the site’s 404 log with a one-click redirect for every missing address.
  • Sitemap & robots — who provides the XML sitemap and what is in it, a robots.txt editor that refuses to block the whole site by accident, the 404-log switch, and the list of pages hidden from search.
  • Schema — basic JSON-LD structured data (the website, the organization or local business behind it, Article and breadcrumbs), printed only where nothing else prints one.

Every page edit keeps the values it replaced, so it can be undone. Nothing is auto-generated or auto-saved: what you see in the editor is exactly what the page gets once you press Save to site.

One source of truth: next to Yoast, Rank Math, AIOSEO and SEOPress

Most client sites already run an SEO plugin, and its fields are where the site’s titles live. WPClientHub never adds a second set. When Yoast SEO, Rank Math, All in One SEO or SEOPress is active, a page’s fields are read from and written into that plugin’s own storage — its editor in wp-admin shows the new values, its templates and output stay in charge, and its sitemap and schema keep working. The WPClientHub One plugin prints nothing of its own on such a site, so a tag is never printed twice.

Only on a site with none of them does the WPClientHub One plugin keep the fields itself (in its own post meta) and print the tags: the title, the meta description, robots through WordPress’s own robots tag, the canonical link through WordPress’s own canonical filter, and Open Graph and Twitter cards (Jetpack’s Open Graph tags are switched off so nothing is doubled).

The exact storage each plugin uses, checked against the plugin’s current source on wordpress.org (Yoast SEO 28.6, Rank Math 1.0.280, All in One SEO 5.0.2, SEOPress 10.3):

PluginWhere a page’s fields liveNot stored per page
Yoast SEOPost meta _yoast_wpseo_title, _yoast_wpseo_metadesc, _yoast_wpseo_canonical, _yoast_wpseo_meta-robots-noindex (1 = noindex, 2 = index, 0 = the post type’s default), _yoast_wpseo_meta-robots-nofollow, _yoast_wpseo_opengraph-title, …-description, …-image and …-image-id. Yoast rebuilds its indexable for the page right after a write.Twitter card type (site-wide in Yoast)
Rank MathPost meta rank_math_title, rank_math_description, rank_math_canonical_url, rank_math_robots (a list: index/noindex, nofollow), rank_math_facebook_title, …_description, …_image and …_image_id, rank_math_twitter_card_type.—
All in One SEOA row per post in the aioseo_posts table (title, description, canonical_url, robots_default/noindex/nofollow, og_title, og_description, og_image_type + og_image_custom_url, twitter_card), written through AIOSEO’s own model so its mirrors (_aioseo_title, _aioseo_description…) stay in step.—
SEOPressPost meta _seopress_titles_title, _seopress_titles_desc, _seopress_robots_canonical, _seopress_robots_index and _seopress_robots_follow (“yes” = noindex / nofollow), _seopress_social_fb_title, …_desc, …_img (+ its attachment id and size).Twitter card size (site-wide in SEOPress)
None of themThe WPClientHub One plugin’s own post meta (_wpch_seo_title, _wpch_seo_description, _wpch_seo_canonical, _wpch_seo_noindex, _wpch_seo_nofollow, _wpch_seo_og_*, _wpch_seo_twitter_card), and the plugin prints the tags.—

With The SEO Framework, Slim SEO, SmartCrawl or Squirrly SEO active, page fields are shown read-only and not edited — their storage is not something we write to. Redirects, the 404 log, robots.txt and the sitemap view still work. When two of the four editable plugins are active at once (it happens), the first of Yoast → Rank Math → AIOSEO → SEOPress wins and the tab says so.

Pages

The Pages section reads every published page from the site (200 at a time, in the background) and keeps the list; Read pages again refreshes it. For each page you see the title and description as the page gets them — with the plugin’s template applied, so a page without a title of its own shows what the template produces — plus a length meter under each: green inside the range search results show in full (30–60 characters for a title, 70–155 for a description), amber when short or long, red when it will be cut off. Key pages (the home page, the blog page, the shop page and every page in an assigned menu) are marked and listed first.

Filters: Key pages, No own title, No own description, noindex, a search box and a post-type picker.

Edit opens the page’s fields: title, meta description, hide from search (noindex), don’t follow links (nofollow), canonical URL, and the social-sharing fields (Open Graph title, description and image, and the Twitter card type where the plugin stores it per page). A key page set to noindex gets a warning. Save to site writes the changed fields at once; the site answers with the values it now holds, and the list updates.

Changed in WordPress since you opened it? Every save carries the values the editor saw. If someone changed the page in wp-admin in between, the save is refused as a conflict, the current values are shown, and you decide — save again, or keep theirs. Nothing is overwritten blindly.

Edit N selected applies the same change to many pages: the noindex and nofollow switches, the Twitter card type, or clearing the canonical. Text fields are per page on purpose.

Draft with AI

In the editor, Draft with AI reads the page’s own text from the site (its title, the first part of its content, the site name and tagline, and the focus keyword if the SEO plugin has one) and writes a title of at most 60 characters and a description of at most 155 — from that text and nothing else, in the page’s language. It costs one AI credit, the same credit every model-backed action uses; the balance is shown next to the button and the credit is refunded if the site or the model fails to answer.

The draft only fills the two inputs. Read it, change what you like, and press Save — or Cancel, and nothing happened. A draft is never written to the site on its own.

Redirects

Add a redirect from a path on the site (/old-page; a trailing slash and letter case don’t matter, and a query string in the source matches only that query) to a path or a full URL, as 301 permanent, 302 or 307 temporary, 308 permanent keeping the method, or 410 gone (no target: the page is gone for good). Regular-expression sources (^/blog/(\d+)/(.*)$ → /news/$2) are opt-in per redirect and capped at 200 per site; plain redirects at 10,000.

The whole set is sent to the site as one signed instruction every time it changes — the Redirects card says Applied once the site confirms — and the site looks requests up with one indexed query (and none at all while a site has no redirects). It counts how often each redirect is followed and reports the counts back on every sync.

Loops are refused before anything is sent: a redirect to itself, a source that already has a redirect (the same address once normalised), and chains that come back to where they started (A → B → A, in any order). Changing a redirect into a loop is refused the same way.

Import CSV takes one redirect a line — source,target,code,match, code 301 unless given, match regex for a pattern, a header row allowed — adds the good rows in one go and lists the skipped ones by line with the reason. Export writes the same format.

404 log

With SEO management on and the 404 log switched on (it is by default), the site keeps its 500 most recent missing addresses, grouped by path with a hit count, when each was first and last seen, and the last referring page. No IP addresses or browser details are stored. Fetch log reads it into the hub; Redirect on a row opens the redirect form with the path filled in and removes the entry once the redirect is saved; Forget drops a row; Clear log empties it on the site.

Sitemap

The Sitemap card says who provides the site’s XML sitemap. When Yoast SEO, Rank Math, All in One SEO or SEOPress has its sitemap switched on, that sitemap is linked and left alone — its settings live in the plugin. Otherwise WordPress’s own sitemap (/wp-sitemap.xml) is used and tuned rather than replaced: pick which post types and taxonomies are in it, whether author archives are, and the plugin leaves out pages set to noindex and adds last-modified dates. A site set to discourage search engines (Settings → Reading) has no sitemap and every page carries noindex until that box is unticked; the tab says so in red.

robots.txt

The card shows what the site serves today — WordPress’s own virtual robots.txt, or the custom text once the editor is on. A real robots.txt file on the server always wins, so the editor is off while one exists. As you type, the text is read the way a crawler reads it: unreadable lines, unknown directives, rules before any User-agent, a missing Sitemap: line and a Disallow: /wp-content/ (which stops Google rendering pages) are pointed out.

The never-block-the-site safety. A text that tells every search engine (or Googlebot or Bingbot) not to crawl any page — Disallow: / without an Allow: / undoing it — is flagged in red, and Review and apply shows a line-by-line diff of today’s file against the new one, asks once, and then asks a second time, explicitly, before applying it. The site itself refuses such a text unless that confirmation came with it. Switching the editor off puts WordPress’s own robots.txt back.

Schema

When no SEO plugin or structured-data plugin prints schema on the site, the WPClientHub One plugin can print one JSON-LD graph on every page: the WebSite, the entity behind it (an Organization, a LocalBusiness subtype — plumber, dentist, restaurant and forty others — with its address, telephone and price range, or a Person) with the social profiles from the site-wide defaults as sameAs, and on posts and pages the WebPage, an Article (headline, dates, author, featured image) and BreadcrumbList from the page tree and categories. When Yoast SEO, Rank Math, All in One SEO, SEOPress or a dedicated schema plugin (Schema & Structured Data for WP, Schema Pro and others) already prints one, the card says who does and WPClientHub prints none — two graphs confuse Google. The values are kept for when that changes.

Site-wide defaults

Above the Pages table: the title template and separator every page uses unless it has a title of its own (%title% %sep% %sitename% by default; %tagline%, %page%, %term% and %year% are the other variables), the home page’s title and description, whether Open Graph tags are printed, the default social image, the Twitter handle and the social profiles. On a site run by one of the four SEO plugins the titles and tags are that plugin’s — the defaults then feed the schema and the profiles only, and the card says so.

Undo

Every applied page change is kept as a revision — which fields, the values they replaced, the values written, who, when — on the hub and on the site (the last ten per page). The editor lists them with Undo, which sends the previous values back. An undo is refused when the page changed again since, exactly like a save would be.

Activity Log, reports and the API

  • Activity Log (category Content): seo.page_updated and seo.page_undone name the page and the fields that changed, never the values; seo.settings_changed names the sections; seo.robots_changed; seo.redirect_added, seo.redirect_changed, seo.redirect_removed, seo.redirects_imported; seo.404s_cleared.
  • Client reports add one line to the SEO section when something was changed in the period: “SEO changes this period: 4 pages had their titles or descriptions updated and 2 redirects were added.” — next to the SEO Health score the report already shows.
  • Public API (Scale, see Public API & webhooks): GET /api/v1/sites/{site}/seo/pages and GET …/seo/redirects under the seo:read scope; PATCH …/seo/pages/{post_id} and POST …/seo/redirects under seo:write, with the same conflict, loop and duplicate rules as the app.

Plans, the plugin version and downgrades

Studio and above, the Agency trial included. On Free the SEO tab keeps SEO Health exactly as it was and shows what SEO management adds, with the Studio badge; every write is refused. Sites need WPClientHub One 2.0 or newer — an older site shows “Plugin update needed” with a link to the fleet update. Leaving Studio deletes nothing: the site keeps serving the titles, redirects, robots.txt and schema it has, the hub keeps your settings and redirects, and simply stops accepting changes until the plan comes back — then the settings and the redirect set are re-sent and confirmed on the next sync.

Limits and honest notes

  • Pages are read from the site into the hub; the list is as fresh as the last read (shown under the heading). An edit always goes to the site live, carrying what you saw.
  • Only published pages, posts and public custom post types are listed — drafts, attachments and archives are not. Term (category/tag) SEO fields are not edited.
  • The effective title and description come from the plugin where it can tell us (Yoast, All in One SEO, Rank Math’s variables, our own renderer); for SEOPress the stored text is shown with its variables replaced as far as we can.
  • Redirects run inside WordPress (at template_redirect), so a request a cache or the web server answers before WordPress never reaches them — purge the page cache after adding one for a cached address.
  • The 404 log holds the newest 500 paths; the Twitter card type is site-wide in Yoast SEO and SEOPress; AI drafts need credits (20 a month on Free, more on paid plans, top-ups any time).

Troubleshooting

The Pages section is empty
The pages are read from the site the first time the section opens, in the background; a large site takes a minute. Press Read pages again. If the site is not connected or its plugin is below 2.0, the section says so.
Save answers “This page was changed in WordPress since you opened it”
Someone edited the same fields in wp-admin after the page was read. The current values are now shown; check them, then save again — or press Save my values anyway to overwrite them on purpose.
A field is refused as “not stored by Yoast”
The site’s SEO plugin keeps that field site-wide, not per page — the Twitter card type in Yoast SEO and SEOPress. Change it in the plugin’s own settings.
Page fields are read-only on a site
The SEO Framework, Slim SEO, SmartCrawl or Squirrly SEO is active. WPClientHub does not write to their storage; redirects, the 404 log and robots.txt still work from here.
The site still serves the old title after a save
A page cache or CDN is serving the old HTML. Purge it (the Cloudflare integration on Scale purges automatically after updates); the fields on the site are already changed — open the page’s editor in wp-admin to see them.
Redirects show “Sending to the site…” for a long time
The site did not confirm the set — it is offline, or on an older plugin. The hub sends it again on the site’s next sync; the Redirects card shows the last error if the site refused it.
A robots.txt change does nothing
A real robots.txt file exists on the server, and it always wins over the virtual one WordPress serves — the card says so and the editor is off. Remove the file to manage it from here.
No structured data is printed
The Schema card names the plugin that already prints one on this site; WPClientHub stays out on purpose. On a site with none, check that SEO management is on and the schema switch is on.