Builds By Luke
All plugins

WordPress Plugin · v1.0.0 · Coming soon

SEO Flight Recorder

Records your pages’ SEO output — titles, meta, robots, canonicals, schema — and tells you what changed, when, and which update did it.

  • WordPress 6.2+
  • PHP 7.4+
  • GPLv2+
  • Read-only
  • Any SEO plugin

Free core coming to the WordPress.org plugin directory. This page is the plugin’s official home.

SEO Flight Recorder icon

Your SEO can break silently. Nothing tells you.

A plugin update wipes your product schema. A settings collision flips a page to noindex. Your canonical quietly starts pointing somewhere else. Your sitemap begins returning errors. The site looks fine. The dashboard says nothing. Google notices — sometimes weeks before you do, and Search Console reports what its crawler decided, days later, without ever telling you what on your site changed or what changed it.

SEO Flight Recorder is the black box for your site’s SEO. It records the SEO-critical output of the pages you care about, re-checks them on a schedule and immediately after anything on the site changes, and writes every difference to a flight log — with the site events that immediately preceded it, so the culprit has a name.

How it works

Record. Diff. Name the culprit.

Job one · The recording

Record what your pages actually say

SEO Flight Recorder fetches the pages you care about from your own server, normalises the SEO-critical fields out of the rendered HTML, and stores a compact snapshot. Then it does it again — daily, and on demand — and diffs the result. Not “is there a problem”, but “this field said that yesterday and says this today”.

  • Title & meta description
  • Meta robots — noindex tripwire
  • Canonical URL (value, not just presence)
  • Schema types, including nested @graph
  • Open Graph & Twitter cards
  • First H1 and H1 count
  • HTTP status & redirect target

Recent changes

/product/analog-kit/ critical

meta robots — index, follownoindex, follow

Site events immediately before this change: Plugin updated · Example SEO Suite 4.2

/product/analog-kit/ critical

schema — Product, BreadcrumbListBreadcrumbList

A Product type vanished. Same update window.

/about/ warning

title — About us — StudioAbout us

No site events in the window. Unexplained.

/journal/hello/ expected

meta description changed

You edited this page 4 minutes earlier — filed as a content edit.

The Flight Log — what changed, how bad it is, and what changed it. Example data shown.

Job two · The culprit

Name the update that changed it

External SEO crawlers poll from outside. SEO Flight Recorder lives inside WordPress, so it sees the moment an update finishes, a plugin is activated, the theme is switched, or an SEO-relevant setting changes — and runs a check about 90 seconds later, once caches have settled. When output changed, the log entry carries the events that just happened, so the culprit has a name.

  • It knows when you edited the page, and files those as expected content edits — not alarms.
  • A change that endangers indexability stays critical even then.
  • Site-wide watch too: robots.txt, the sitemap, and the “Discourage search engines” switch.

Site-wide checks

robots.txtReachable · unchanged since 4 Jun
XML sitemapReturns 500 was 1,284 URLs
Search enginesSite is indexable blog_public = 1

Monitoring status

Loopback OK

This site can fetch its own pages, so monitoring is live. If it ever can’t, every screen says monitoring impaired — never a false all-clear.

The site-wide watch, and the self-check that keeps it honest. Example data shown.

A recorder, never a hand on the controls

It does not edit your SEO output, generate meta tags or schema, crawl other websites, or promise rankings. It records, diffs and alerts. It proves what your pages said, when they changed, and what changed them.

Honest when it cannot see

If your host blocks loopback requests, checks cannot run — so it says monitoring impaired on the dashboard, in Site Health and by email. A monitor that goes quiet when it breaks is worse than no monitor at all.

Nothing leaves your site

The only requests it makes are to this site’s own public URLs, from your own server — the way WordPress’s own Site Health checks work. Records stay in your database. No third-party crawler, API or CDN is involved.

In the free build

The whole engine, not a teaser.

The diff engine and the culprit timeline are the point of this plugin — so they are free, complete, on every field and every check.

  • Up to 10 monitored pages

    Front page auto-added; add the rest by URL or post picker. Every field, every check — no gates.

  • Daily + post-update checks

    A daily scheduled check, an automatic one ~90 seconds after any update, and a manual “Check now”.

  • Flight log

    Every change with before → after, severity, timestamp, and the site events that immediately preceded it.

  • Expected-change intelligence

    Changes to a page you edited yourself are filed as content edits, not alarms — unless they endanger indexability.

  • robots.txt & sitemap watch

    Content drift, reachability, XML validity, URL-count drops — plus a critical alarm if robots.txt starts blocking everyone.

  • The blog_public tripwire

    “Discourage search engines” flipping on — the classic staging-to-production catastrophe — caught even when page checks can’t run.

  • Email alerts with all-clear

    Mail above your chosen severity, once per check, in plain language. Resolved findings send the all-clear.

  • WP-CLI + Site Health

    wp seo-flight-recorder check / status, including --format=json, plus Site Health tests and a dashboard widget.

Free vs Pro

Pro is scale, integrations and the client-facing artifact.

Retention and page count are capacity dials, not feature locks — the free build stays fully functional on every one of them. Here is the honest split.

Capability Free Pro
Field-level snapshot & diff engine (title, meta, robots, canonical, schema, OG, H1, status)
Update-culprit attribution + expected-change intelligence
robots.txt, sitemap and “Discourage search engines” watch
Email alerts with all-clear, flight log, resolve/mute notes
Site Health, dashboard widget, WP-CLI (incl. --format=json)
Loopback self-check with honest “monitoring impaired” state
Monitored pages 10 Unlimited + sitemap sweep
Check schedule Daily + post-update Hourly + post-update
History retention 30 days / 200 changes Unlimited
Pre-update armed baseline (snapshot now, update, auto-compare)
Slack & webhook alerts
White-label weekly client digest (print / PDF)
REST status endpoint for fleet dashboards
Ignore rules / expected-change management

Pro · founder pricing

Pro

$99/yr

Up to 5 sites · for the freelancer watching the sites they manage

Agency

$199/yr

Unlimited sites · white-label, for client care plans

14-day trial, no card required. Annual, in US dollars. If a licence lapses you keep the features — only updates and support stop. Pro is sold and licensed through Freemius, the merchant of record.

Questions people ask.

Doesn’t Google Search Console already tell me this?

Search Console tells you what Google’s crawler eventually decided, on its own schedule — often days or weeks later — and it doesn’t watch social tags or canonical values, doesn’t run the moment an update finishes, and never names the plugin that caused it. SEO Flight Recorder tells you what your HTML said, within a day (or ~90 seconds after an update), with the likely cause attached. They complement each other; only one of them is on your side of the fence.

How does it know which update caused a change?

It keeps a short log of site events — plugin, theme and core updates, activations, deactivations, theme switches, SEO-relevant setting changes, and edits to monitored pages. When a check finds a difference, the events since the previous clean check are attached to the log entry. It is honest about uncertainty: entries say “site events immediately before this change”, and when nothing happened in the window, it says so.

Does it work with Yoast, Rank Math, AIOSEO or SEOPress?

Yes — with all of them, and with none of them. It monitors the rendered output of your pages regardless of what generates it. It is not an SEO plugin and does not compete with yours; it verifies that whatever your SEO stack promised is actually what your pages serve.

Does it change my SEO output or fix problems automatically?

No, and that’s deliberate. It is strictly read-only: it records, diffs, and alerts. You — or your SEO plugin — stay in charge of what your pages say. A recorder you can trust must never be a hand on the controls.

What counts as a critical finding?

noindex appearing on a monitored page, the site being switched to “Discourage search engines”, a canonical moving to a different domain or disappearing, a schema type vanishing, a monitored page starting to return errors or redirect off-site, robots.txt blocking all crawlers, a broken or invalid sitemap, and an emptied title. Warnings cover meaningful-but-possibly-intended changes: title and description edits, Open Graph changes, H1 changes, sitemap shrinkage. Changes you made yourself by editing the page are logged as informational.

What can’t it see?

Three things, and it says so rather than pretending otherwise. If your host blocks loopback requests the plugin cannot fetch its own pages — it detects that and reports “monitoring impaired” everywhere, never a false all-clear. CDN-level caches can serve stale HTML until they expire, which delays detection (there is an optional cache-bypass mode that defeats most page caches). And tags injected by JavaScript after page load — schema added via Tag Manager, say — are invisible to a server-side fetch, so they are not monitored.

Will it slow my site down?

No. Checks run in the background via WP-Cron, fetch a handful of your own pages with a strict time budget, and store compact snapshots. Nothing runs on your visitors’ page loads, and nothing is added to your front end.

Found out weeks late, from a traffic graph?

That is the normal way to discover an SEO regression, and it is a terrible one. SEO Flight Recorder puts a timestamp and a suspect on it instead — within a day, or ninety seconds after the update that did it.