WordPress SEO checker: what your plugin really puts on the page

By SEOgrinder · Published · 9 min read

Short answer: A WordPress SEO checker reads the page your site actually delivers, because that is what search engines get, and not the settings you typed into a plugin. Open one post, read its title, meta description, canonical, robots rules, sitemap and structured data, and compare them with what you meant to set. You can do that with four curl lines or with the free SEOgrinder scan, whichever plugin you use. A clean page removes obstacles; it promises no ranking.

What is a WordPress SEO checker, and why check the page instead of the settings?

A WordPress SEO checker opens a public page of your site the way a visitor or a crawler does and reports what it finds in the HTML and in the server's answer: which title, which description, which canonical address, which robots rules, whether a sitemap exists, whether structured data is there and readable.

That is different from the screens of your SEO plugin. A settings screen shows what you entered. The page shows what arrived. Between the two sit your theme, other plugins, cached copies and WordPress itself, and each of them can change or drop what you meant to send. Google's page on meta descriptions even names WordPress among the systems where you may not edit the HTML directly and work through a settings page instead.

This article shows how to read the result in a few minutes, for any plugin, and what a check from outside cannot tell you. SEOgrinder is our tool; we build it. A WordPress plugin of ours is planned, it does not exist yet, and you need nothing but the web tool for what follows.

Who writes into the HTML of a WordPress page?

Four hands can touch the same tags. That is why the settings alone never tell you the result.

  • WordPress itself. Core writes some tags without any plugin. Its function rel_canonical() is documented as "Outputs rel=canonical for singular queries" (developer.wordpress.org): single items such as posts and pages, not archives. Since version 5.5 core also exposes a sitemap index at /wp-sitemap.xml and references it in robots.txt (core announcement, 22 July 2020).
  • Plugins and themes, through filters. The documentation of wp_get_document_title() lists four filters that change the title, and the wp_robots filter does the same for the robots meta tag (title, robots). Any plugin or theme can use them.
  • The theme. Tags in the head are printed through the wp_head hook. The documentation says that, although this is theme-dependent, the hook is widely supported. Our reading: a theme that never calls it prints nothing that hangs on it.
  • Caches. A page cache or CDN can hand out an older copy of the HTML than your settings now produce.

The WordPress SEO check: six things to read on the page

Use a post, not only the home page. Read these six in this order.

1. Title

Look for one <title> that is specific to this page. Google's page on title links says to avoid "repeated or boilerplate text" in titles. If your plugin uses a title template, read the result on a post, a page and the blog index.

2. Meta description

The <meta name="description"> is optional for Google: it "will sometimes use" it for the snippet when it describes the page better than the page text (snippet documentation). The same page says: "Identical or similar descriptions on every page of a site aren't helpful when individual pages appear in search results." If you wrote descriptions in the plugin and none show up in the HTML, something between settings and page ate them.

3. Canonical

Look for exactly one <link rel="canonical"> with an absolute https address that, on a normal page, points at the page itself. Google's page on canonicals recommends a self-referential canonical on the canonical page and absolute rather than relative addresses. Two canonicals with different addresses contradict each other, so something writes a second one; find out what.

4. Robots rules

Rules live in three places: the robots meta tag in the HTML, the X-Robots-Tag header of the response (it never shows in the page source) and /robots.txt. Look for a noindex on any page that should be found.

The classic WordPress case is the box "Discourage search engines from indexing this site" under Settings, Reading. The documentation (last updated 8 June 2024) says it writes <meta name='robots' content='noindex,nofollow' /> into the head "if wp_head is used", and that "it is up to search engines to honor your request". The core announcement adds that the sitemaps are disabled with that setting. One box, two effects, both visible on the page.

A robots tag alone is no alarm. On 4 November 2026 we ran the command below against https://wordpress.org/news/: its only robots tag was <meta name='robots' content='max-image-preview:large' />, no noindex. If rules conflict, Google applies the stricter one: "the more restrictive rule applies" (robots meta tag). So a forgotten noindex beats whatever the plugin says.

For robots.txt, read the file, not the setting: WordPress can generate it (do_robots(): "Displays the default robots.txt file content") and code can change it through the robots_txt filter (function, filter).

5. Sitemap

Look for a sitemap that answers 200, lists the pages you want in search and is announced in robots.txt with a Sitemap: line. The core address is /wp-sitemap.xml; a plugin may use another one, so follow the line in robots.txt. A sitemap is no promise: Google says it "doesn't guarantee that all the items in your sitemap will be crawled and indexed" (sitemap overview).

6. Structured data

Look for <script type="application/ld+json"> blocks that parse and whose types fit the page. Google recommends JSON-LD where your setup allows it (structured data intro). Broken markup is ignored, so presence alone proves little.

How to run the check: four lines or one scan

From the command line. Replace the address with one of your posts. The first line prints every matching tag: title, description and canonical should each appear once (several JSON-LD blocks are fine), and the first title line is the page title. The others show the header, robots.txt and the status of the core sitemap.

curl -s https://example.com/my-post/ | grep -o -i -E '<title>[^<]*</title>|<meta[^>]*name=.(description|robots).[^>]*>|<link[^>]*rel=.canonical.[^>]*>|<script[^>]*ld\+json[^>]*>'
curl -sI https://example.com/my-post/ | grep -i x-robots-tag
curl -s https://example.com/robots.txt
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/wp-sitemap.xml

With SEOgrinder. It is free and needs no account.

  1. Open SEOgrinder, enter the address of a public post or page and start the analysis.
  2. Read the Tasks tab. It lists findings sorted by effect, for example "No meta description", "No canonical tag", "2 different canonical tags", "Page is excluded from Google", "robots.txt blocks this URL", "No sitemap found", "No structured data".
  3. Open Page on Google. Its cards show what was found, not only what is wrong: Title & description shows the text of both tags, Indexing whether the page can be indexed, its HTTP status, whether robots.txt allows it and whether it is in the sitemap, Canonical the address and whether it is "Self-referencing", Structured data the types and the number of JSON-LD blocks.
  4. Change the setting in WordPress, empty your page cache and press Check again. Reports are cached for up to 24 hours.

SEOgrinder reads what any visitor gets. It does not log in to WordPress, cannot see your settings and does not say which plugin wrote a tag.

What the plugin pages say, and what only the page can confirm

On wordpress.org the big SEO plugins describe their jobs in their own words. Yoast SEO lists "Canonical URLs to prevent duplicate content issues" and "Advanced XML sitemaps for clear site indexing" (plugin page). Rank Math lists "16+ Schema types to add rich results in a few clicks" (plugin page). All in One SEO lists "automatic canonical URLs and per-post canonical tags to prevent duplicate content" (plugin page). All three carry the tags schema, seo and xml sitemap (checked on 4 November 2026).

These lines say which jobs a plugin offers. They cannot say what your page contains today, because that depends on your settings, your theme, other plugins and caches. We did not test these plugins and we do not compare them; nothing here says one writes better HTML than another. The page is the only evidence.

What a check from outside cannot tell you

  • Whether Google has indexed the page. A scan shows what your server delivers now. Google's URL Inspection tool "provides information about Google's indexed version of a specific page", and the same page warns: "Your page may have changed or become unavailable since Google last saw it."
  • Who wrote a tag. You see the tag, not whether core, theme or plugin printed it. Our advice: on a copy of the site, switch the candidates off one at a time.
  • Rankings. No checker can promise a position.
  • Anything behind a login. SEOgrinder checks public pages only.

Common mistakes

  • Judging by the settings screen. It shows what you entered, not what arrived.
  • Checking only the home page. Posts, pages, archives and category pages come from different templates, and core's own canonical function only runs on single items. Read a post, a page, the blog index and a category.
  • Leaving "Discourage search engines" ticked after launch. Per the documentation it writes a noindex tag, and per the core announcement it switches the core sitemaps off.
  • Two writers for one tag. A second plugin or the theme adding another canonical. SEOgrinder reports a page that names more than one different address.
  • Reading an old copy. Empty the cache after every change, and use Check again in SEOgrinder.
  • Treating "a tag exists" as "the tag is right". A canonical can point at a page that does not answer ("Canonical points to an unreachable page"), and a sitemap can list addresses that redirect.

FAQ

Do I need another plugin to run a WordPress SEO checker?

No. A check from outside installs nothing. The curl lines need a terminal; SEOgrinder needs only the address.

Does it matter whether I use Yoast, Rank Math or All in One SEO?

Not for the check. It reads the delivered page and does not ask which plugin wrote it. What each plugin offers stands on its own wordpress.org page; what your page contains, only the page shows.

Why is my meta description missing although I wrote one in the plugin?

We cannot see your site, so these are causes to rule out, not a diagnosis: an old cached copy; a theme that does not call wp_head; a description set for another kind of page than the one you checked; another plugin or the theme writing over it.

Your next step

Pick one post of your site and run the four lines or the free scan at SEOgrinder. Fix the first tag that differs from what you meant to set, empty the cache and press Check again. For the wider list of checks, see our SEO audit checklist; if a page is missing from Google, read why your website is not showing on Google.

More from the blog