Beschrijving
DadsFam SEO is a complete, free SEO plugin for WordPress: on-page analysis, XML sitemaps, schema, OpenGraph, breadcrumbs and robots.txt, plus GEO (Generative Engine Optimization) tools that help AI answer engines such as ChatGPT, Google AI Overviews, Perplexity, Gemini and Claude find and cite your content. You can extend it with the optional DadsFam SEO Pro add-on plugin for AI tools, redirects and analytics — it plugs into the same dashboard.
Everything described below works on every site. Nothing is disabled, blurred out, time-limited or reduced.
Free Features
- SEO Brain — A self-learning brain for SEO, AEO and GEO. It learns your site in the background, prepares fixes and explains each one in plain English (focus keywords, meta descriptions, alt text, schema, broken internal links, empty settings), and on Autopilot applies them itself. It only ever fills in what is empty, keeps an undo for every change, learns from what you accept or undo, and runs entirely on your own server
- On-Page SEO Analysis — 26-point weighted scoring engine covering keyword placement, density, content length, heading structure, internal/external links, image alt text, readability (Flesch-Kincaid, sentence length, passive voice, transition words) and more
- Category & Tag SEO — Full SEO panel on every category, tag, product category and custom taxonomy: title, description, focus keyword, canonical, noindex, live character counters and a Google preview
- hreflang — Automatic language tags for Polylang, WPML and TranslatePress, with x-default. Does nothing on single-language sites
- Site Health Tests — Five SEO checks added to WordPress’s own Tools Site Health, including detection of the “Discourage search engines” box that silently deindexes entire sites
- WP-CLI Commands —
wp dfseo doctor,audit,rescoreandsitemapfor bulk work and deploy scripts - SERP Preview — Real-time desktop and mobile search result preview with character counters
- Internal Link Suggestions — Finds related published content to link to, ranked by relevance to your focus keyword and title, and shows what you’ve already linked
- XML Sitemaps — Cached index sitemap with per-type sub-sitemaps, image sitemap, and search engine notification via IndexNow on publish
- Schema / Structured Data — JSON-LD for Article, WebPage, WebSite + SearchAction, Organisation, BreadcrumbList, and Speakable
- OpenGraph & Twitter Cards — Full social sharing meta tags with image support
- Canonical URLs — Auto-generated or custom per-post canonical
- Robots Directives — noindex, nofollow, noarchive, nosnippet per post
- Robots.txt Management — Live virtual robots.txt with custom rules support
- Breadcrumbs — Schema-enhanced breadcrumbs via
[dfseo_breadcrumbs]shortcode - Image SEO — Auto-inject focus keyword into alt text on upload
- Site Verification — Google, Bing, Yandex, Pinterest
- Instant Indexing — IndexNow submission (Bing, Yandex, DuckDuckGo, Seznam, Naver) with manual bulk submission and history
- SEO Score Column — Score column on posts, pages, and WooCommerce products
- Dashboard Widget — Quick SEO health overview on WP admin home
GEO — Generative Engine Optimization (Free)
Get discovered and cited by AI answer engines, the next frontier of search:
- llms.txt — Auto-generated AI content map served at
/llms.txt(the emerging llmstxt.org standard) - AI Crawler Controls — Allow or block 13 major AI bots (OpenAI GPTBot, ClaudeBot, Google-Extended, PerplexityBot, Applebot, Meta AI, CCBot, Bytespider and more) from robots.txt
- Speakable Schema — Marks content for voice assistants and AI read-aloud
- GEO Content Checks — Analysis flags question-style headings, lists/tables, and concise direct-answer openings that AI engines prefer to quote
Pro Features (DadsFam SEO Pro add-on)
Install the DadsFam SEO Pro add-on plugin alongside this one and activate your licence to unlock:
- AI Meta Generator — One-click SEO title and meta description generation using Claude AI
- AI Keyword Research — Relevant keyword suggestions with type, intent and difficulty
- AI Content Optimisation — Actionable content improvement recommendations
- AI Title Variants — Generate click-worthy title alternatives
- AI Content Outline — Full SEO-optimised content outline, insertable into the editor
- Real Keyword Data — Actual search queries, clicks, impressions, CTR and ranking position straight from the Google Search Console API
- Redirect Manager — 301, 302, 307, 410 redirects with hit tracking and regex support
- Auto-Redirect on URL Change — Automatically creates a 301 when a published post’s slug changes, with redirect-chain prevention
- Analytics Dashboard — Organic traffic trends, engine breakdown, and content decay detection over 7–90 day windows
- Bulk SEO Editor — Edit focus keyword, title, and description for hundreds of posts at once
- FAQ Schema — FAQ rich results with AI-assisted generation
- Local SEO — Full LocalBusiness schema with address, phone, geo-coordinates
- Data Import — One-click import from Yoast SEO, Rank Math, and All in One SEO
- WooCommerce — Product schema and integration
- News Sitemap — Google News-compatible sitemap
- Google Indexing API — Direct URL submission to Google
A word about PRO
Right, let me be straight with you, because I hate being sold to as much as you do.
Everything above is free and it stays free. The scoring engine, XML sitemaps, schema, OpenGraph, canonicals, robots directives, breadcrumbs, internal link suggestions, Instant Indexing and the whole GEO toolkit — none of those are premium features. Those are the things an SEO plugin should just do, and if I put them behind a paywall I would be taking the mickey.
There is a PRO add-on. It exists because I am a dad in Cape Town, and this is one of the things that puts food on the table at my house. That is the honest reason. Not “unlock your potential”, not “supercharge your workflow”. Just: if this plugin helped your work get found and you can spare it, PRO helps me keep building.
What PRO adds is the heavier lifting you reach for once the basics are in place — AI-written titles, descriptions and outlines, real keyword data from Google Search Console, a redirect manager that catches slug changes on its own, an analytics dashboard, bulk editing across hundreds of posts at once, and one-click import from Yoast, Rank Math or All in One SEO. That is time saved and depth added. It is not the plugin working properly, because the plugin already works properly.
So if the free one does everything you need, brilliant. Genuinely. Use it, and I hope it gets your work in front of the people looking for it. If you get to the point where the extra depth would save you real time, PRO is at plugins.dadsfam.co.za.
Either way, thanks for using something I built. — Zak, DadsFam
AI Powered by Claude
The DadsFam SEO Pro add-on can connect to the Anthropic Claude API for its AI features. Your API key is stored server-side and is never exposed to the browser.
External services
This plugin connects to third-party services. Nothing is sent anywhere until you switch the relevant feature on, and no personal data is transmitted by the free plugin.
IndexNow (instant indexing)
When “Instant Indexing” is enabled, the plugin tells participating search engines that a URL has been published or updated, so they can recrawl it sooner. It sends the public URL of the post, your site’s IndexNow key, and the public location of that key file. It sends no personal data and no post content.
This happens when you publish, update or delete a post with auto-submit enabled, and when you use the manual bulk-submit button. It is off until you generate an IndexNow key on the Indexing screen.
The requests go to:
- api.indexnow.org – the shared IndexNow endpoint, which distributes the notification to participating engines including Bing, Yandex, Seznam and Naver. Terms: https://www.indexnow.org/terms – Privacy: https://www.indexnow.org/faq
- www.bing.com/indexnow – Microsoft Bing’s own IndexNow endpoint, pinged directly as a fallback. Terms: https://www.microsoft.com/servicesagreement – Privacy: https://privacy.microsoft.com/privacystatement
Your own site
The Health Check screen requests pages on your own site and reads the HTML that comes back, so it can see what a search engine actually receives rather than trusting the settings. These requests go to your own domain only, and are made only while you are on that screen or running wp dfseo doctor.
The DadsFam SEO Pro add-on is a separate plugin and discloses its own services (Google Search Console, Google Indexing API and the Anthropic Claude API) in its own readme.
Schermafbeeldingen







Installatie
- Upload the
dadsfam-seofolder to/wp-content/plugins/ - Activate the plugin in Plugins Installed Plugins
- Navigate to DadsFam SEO Settings to configure
- Edit any post or page to see the SEO meta box below the editor
FAQ
-
Will the SEO Brain change my pages without asking?
-
Not unless you switch on Autopilot. By default it learns and prepares fixes, and nothing changes until you tap Apply. On Autopilot it only fills in fields that are empty (it never overwrites what you wrote), every change is listed with the value it replaced, and any change, or all of them, can be undone. It runs on your own server and sends nothing anywhere.
-
What is GEO (Generative Engine Optimization)?
-
GEO is the practice of optimising your content to be found, understood, and cited by AI answer engines such as ChatGPT, Google AI Overviews, Perplexity, Gemini and Claude — as opposed to traditional SEO which targets the classic search results. As more people get answers from AI, GEO is becoming essential. DadsFam SEO includes an llms.txt generator, AI crawler controls, Speakable schema, and GEO-focused content checks.
-
Do I need a Google service account for keyword data?
-
To see real keyword data from Google Search Console (queries, clicks, impressions, position), yes — you add a Google service account (the same one used for the Google Indexing API) and grant it access in Search Console. The plugin walks you through it. IndexNow instant indexing for Bing and others works with no setup at all.
-
Will this conflict with another SEO plugin?
-
Run only one SEO plugin at a time. DadsFam SEO can import your existing data from Yoast, Rank Math, and All in One SEO so you can switch cleanly.
Beoordelingen
Er zijn geen beoordelingen voor deze plugin.
Bijdragers & ontwikkelaars
“DadsFam SEO” is open source software. De volgende personen hebben bijgedragen aan deze plugin.
BijdragersVertaal “DadsFam SEO” in je eigen taal.
Interesse in ontwikkeling?
Bekijk de code, haal de SVN repository op, of abonneer je op het ontwikkellog via RSS.
Changelog
2.12.4
- Fixed: a picture shown on more than one page (one photo for two products) gets one alt text suggestion, from the more important page, instead of two that contradict each other.
- Improved: after an update, the update steps (refreshing scores, the Brain’s fresh start on trust) also run from the Brain’s background run, so sites nobody logs into still get them.
2.12.3
- Fixed: alt text you wrote yourself is never offered for replacement, even when it repeats the picture’s file name or title. Only alt text exactly as the upload filler wrote it (“Dadsfam News Updates”) can be upgraded.
2.12.2
- Improved: alt text for a product’s photos and a page’s featured image is now the product or page name, with the site name taken off the end. It used to come from the picture’s file name, which carried camera codes and typos.
- Improved: a picture inside the text is named from its file only when every word of that name also appears on the page. Otherwise the page title is offered for you to check, and Autopilot leaves it alone.
- Improved: alt text that was only ever the file name, filled in automatically at upload (“Toilet Bowel Cleaner”), can now be replaced with the product or page name. Alt text you wrote yourself is never touched, and Undo puts the old one back.
- Improved: on big sites every kind of fix keeps a fair share of the fix list, so image and schema fixes are not crowded out by hundreds of missing keywords, and Autopilot works on all of them at once.
- Improved: Autopilot never sets a one-word keyword on its own, and the Brain prefers a phrase from the page’s own title that contains the word (“returns policy”, not “policy”).
- Improved: the site summary for AI assistants (llms.txt) is built from the keywords of your most important pages, never from dates, and always waits for your approval.
- Changed: after this update the Brain starts fresh on how much to trust its alt text and keywords, because both are now made differently.
2.12.1
- New: the SEO Brain, a self-learning brain for SEO, AEO and GEO built into the free plugin. It reads every page in the background, a few dozen at a time so the site never slows down, and learns your site: which phrases each page is about, how rare each phrase is across the whole site, and which pages your own links treat as the most important.
- New: it prepares fixes and explains each one in plain English: a focus keyword for every page without one, a meta description written from the page’s own sentences, alt text for pictures, the right schema for contact, about and FAQ pages, broken links between your own pages, and site settings left empty (business name, logo, sharing picture and the llms.txt summary AI assistants read).
- New: “Ask me first”, the default, waits for one tap, or “Fix all for me”. Autopilot applies the fixes it is sure of by itself, new pages included, within minutes of publishing. Either way it only fills in what is empty, never overwrites your own work, and lists every change with an Undo, plus “Undo everything”.
- New: it learns from you. Apply, “Not this one” and Undo all teach it. Undo one kind of fix a few times and Autopilot stops doing it and asks instead, a keyword you turn down is never suggested for that page again, and it learns whether you prefer two- or three-word keywords.
- New: it keeps watch for things that quietly wreck search traffic: search engines blocked in Settings Reading, a second SEO plugin running, plain ?p=123 addresses and important pages set to noindex. It also shows pages nothing links to (and which pages to link them from), pages chasing the same keyword, and descriptions repeated across pages.
- New: the Brain’s ideas also appear in the SEO box under the editor, where you write. One tap fills in the suggested keyword or description for you to check, and nothing is saved until you save the page.
- New: it never proposes the same keyword for two pages, or a piece of one another page already targets, so it can’t create the keyword clash it warns you about. Cart, checkout, account and hidden pages are left alone.
- Tested against a real 246-page shop and blog: its keyword picks matched the keywords already chosen by hand on 83% of pages, and it found real broken links between the site’s own pages.
- New: X-ray any page to see the keyword the Brain would pick and why, a ready description, key takeaways and question headings AI answer engines like to quote, and the pages it should link to.
- New: AI assistants can reach all of it through eight new abilities (brain-status, brain-suggestions, brain-apply, brain-dismiss, brain-undo, brain-learn, brain-settings and brain-page), and so can the command line with
wp dfseo brain. It all runs on your own server and nothing is sent anywhere. - Fixed: prices in Rand now count as concrete figures in the GEO score. The check looks for prices, percentages and dates, but it reads your text in lower case and was looking for a capital R, so “R500” was never found and every South African price was ignored. Rand amounts such as R500, R 1 000, ZAR 250 and 500 rand now count, and “for 2” is not mistaken for a price.
- Fixed: keywords with a dot, an apostrophe, “&” or an accented letter can now pass “keyword in URL”. WordPress turns “WordPress 7.1.2” into the address wordpress-7-1-2, but the check looked for wordpress-7.1.2, so version numbers and names like these could never pass. The keyword is now cleaned the same way WordPress cleans an address.
- Fixed: a keyword with “&” or an apostrophe now matches its own title and text. WordPress saves “&” as “&”, and many editors turn ‘ into a curly one, so those keywords were never found. Both sides are now compared the same way.
- Fixed: full stops inside “WordPress.org”, version numbers, prices like R1.50 and web addresses no longer end a sentence. They chopped sentences into fragments, which threw off sentence length, transition words and reading ease.
- Fixed: content saved on a single line, as page builders, imports and the REST API often do, is no longer read as one giant paragraph. Each paragraph, heading and list item now counts on its own, so the paragraph-length check judges the paragraphs you actually wrote.
- Fixed: transition words are matched as whole words. “Concept” no longer counts as “once”, “seconds” as “second”, or “third-party” as “third”.
- Fixed: the home page is no longer marked down for a keyword missing from its address. Its address is just your domain name, but the check looked at the page’s slug, which never appears in it. It now says there is nothing to do.
- Fixed: links to your own site written with or without “www.”, or with http:// instead of https://, now count as internal links, and a look-alike address such as yoursite.com.example.net no longer does.
- Fixed: checks that do not apply to a page, such as the home page’s address, now sit in their own “Does not apply here” group in the editor instead of under “Needs improvement”.
- Scores you already have are refreshed in the background after the update, 25 pages a minute, so the dashboard shows the new numbers without you saving each page again.
2.11.3
- Fixed: your page’s title now counts as its H1 heading. Nearly every theme shows the title as the H1 at the top of a post, page or product, but the score only looked for an H1 inside the text you write. So a page laid out the right way lost points for having “no H1”, while a page with an extra H1 typed into its text was told it had “exactly one H1” when visitors actually saw two. The score now counts the title, and when the text adds a second H1 it says so and suggests changing it to an H2.
- Fixed: the featured image and a product’s photos now count as images on the page. Only pictures placed inside the text counted before, so every product with a photo was told to “add images”, and the alt text on its photo was never checked. The featured image and the product gallery now count, and their alt text is checked like any other image’s.
- Fixed: the Analyse button now scores the page as it really is. The classic editor sent the text with every heading, list, link and picture stripped out, and on a product it could send the short description instead of the description. The block editor sent nothing at all, so the page was scored as if it were empty. It now reads the full page, the title and the featured image from whichever editor you use.
- Scores you already have are brought up to date for you. After the update, every page that already has a score is re-scored in the background, 25 pages a minute, so the numbers on the dashboard and in your post lists follow the new rules without you saving each page again.
- For developers: two new filters,
dfseo_title_is_h1anddfseo_count_featured_image, for themes that hide the title or the featured image.
2.11.2
- Fixed: robots.txt had two “User-agent: *” sections and the Sitemap line twice. Many crawlers only read the first section, so they missed the rules WordPress and your other plugins add, such as WooCommerce’s rules that keep add-to-cart links, shop logs and private downloads out of search. There is now one section with every rule in it, and the Sitemap line once.
- Fixed: AI crawlers you let in now follow your site’s rules too. A crawler with its own section in robots.txt skips the general one, so they could crawl the admin area, search results and add-to-cart links. Bots that share a setting are now listed together.
- Fixed: custom robots.txt rules no longer wipe out the rules WordPress and your other plugins add. Yours are added to them, and a rule typed without a “User-agent:” line now applies to every crawler instead of being ignored.
- Fixed: on a new install, /sitemap.xml and /llms.txt did not work until the permalinks were saved by hand. They now work straight after activation.
- Fixed: /sitemap.xml and /llms.txt were redirected to a version with a slash on the end before they loaded. They now load at the address robots.txt gives crawlers.
2.11.1
- Fixed: the example under “Site Summary” on the AI / GEO tab ended with DadsFam’s own description (“We sell premium WordPress plugins and offer support to small businesses”) on every site. It now shows your own site name and tagline, and suggests what to add.
- The screenshots are back on the plugin page, with a caption for each.
2.11.0
A new look, and a dashboard that answers the question you actually have:
- The dashboard now answers “Can people find you on Google and in AI answers?” A score out of 100 built from real checks on your site (can search engines get in, is your homepage title and description written, is the address secure, have you told AI assistants who you are, are your pages given a focus keyword), a plain Yes, Mostly or Not yet, and one button for the next thing to do.
- See your homepage the way the world does. The dashboard shows your homepage as a Google result, and what AI assistants read about you, side by side, and warns you when the title or description would be cut off.
- A setup checklist with a Do it button on every step, the pages that most need work, the pages without a focus keyword, site checks, everyday jobs and a “If something goes wrong” section.
- Every screen redesigned, in FREE and PRO: a new header, tabs, cards, buttons and fields, and a full dark mode to match. The emoji the screens used as icons are replaced by a crisp icon set that looks the same on every computer and phone.
- New Support tab with the ways to get help, the one line to paste into a message (with a Copy button), and the other DadsFam plugins.
- Health Check remembers its last report, so the page shows your results straight away instead of being empty, and the dashboard shows the last score.
- The Changelog tab is now called What’s new.
- Fixed: pressing Analyse under the editor showed the checklist but left the score at 0 and “Not analysed” until you saved the post, and the reading-ease meter read 0. Both now update the moment you press Analyse.
- Fixed: the WordPress footer could sit on top of the dashboard’s cards.
- Fixed: the “Get PRO” box appeared twice on the dashboard. There is now one.
- Fixed: the dashboard’s tips could not be translated.
2.10.0
GEO and AEO:
- llms.txt now dates every article. Each entry carries its last-updated date, so an AI answer engine choosing between two similar pages can prefer the fresher one. The line stays valid llmstxt.org markdown.
- Article schema leads with the focus keyword. The
keywordsproperty now puts the phrase the page was written to answer first, ahead of the tags. Previously only tags were listed. - Fixed: the get-settings ability reported schema, Open Graph, breadcrumbs, speakable and search-engine pings as empty when they had never been saved — even though the plugin treats an unsaved toggle as ON. Any assistant reading that output would have concluded schema was switched off when it was live. It now reports what the site actually does.
- The “A word about PRO” note and the “nothing is disabled, blurred out, time-limited or reduced” line from 2.9.1 and 2.9.2 are included.
2.9.2
- Readme only: added the plain-English “A word about PRO” note the other DadsFam plugins carry — what stays free, why the optional add-on exists, and what it actually adds. Nothing was moved behind a paywall and no code changed.
2.9.1
- Readme only: added the line the other DadsFam plugins already carry — everything described works on every site, and nothing is disabled, blurred out, time-limited or reduced. No change to the plugin itself.
2.9.0
Security and compliance, from the WordPress.org plugin review:
- JSON-LD schema is now hardened against markup injection. The structured-data block is encoded with
JSON_HEX_TAG, so a post title or description containing</script>can no longer close the block early and have the rest of the page parsed as HTML. - The two analysis REST endpoints now check the right capability. They report on one specific post, but only checked the broad
edit_posts. They now requireedit_postfor the post being analysed, so a contributor or another author can no longer read back the title, description and content findings of a private or someone else’s draft. - Sitemap cache keys can no longer collide. The requested sitemap type was sanitised by stripping unexpected characters, which meant two different requests could map to one cache entry. Unknown types are now rejected with a 404, and the key is hashed.
- No more inline scripts or styles. Every
<script>and<style>block that was printed into a page — the health check, Instant Indexing, setup wizard, changelog, AI/GEO tab, category and tag fields, the product list column and the welcome notice — is now a properly registered and enqueued file, with data passed throughwp_localize_script(). - The welcome notice no longer follows you around. It appeared on every admin screen until dismissed; it now shows only on the Dashboard and the Plugins screen, and still only until the plugin is configured or you dismiss it.
- Removed the
Tested up toheader from the main plugin file. It belongs only in readme.txt, where having it in both places can make the plugin page advertise a version you did not intend. - Local file reads now go through
WP_Filesysteminstead offile_get_contents()with a silenced error, and the sitemap stylesheet is streamed withreadfile(). - Description tidied: dropped an unsupported “best-in-class” claim and the comparison to other plugins, and the add-on is now called DadsFam SEO Pro everywhere instead of switching between “Pro” and “Premium”.
2.8.1
Fixed:
- Instant Indexing log times were shown in the future. Entries were stored with
current_time( 'timestamp' ), which returns a UTC timestamp already shifted by your site’s timezone, and the screen then applied the offset a second time. On a UTC+2 site every row read two hours ahead of when it actually happened. New entries store true UTC, and the entries already on your site are corrected once on update — only the ones that are genuinely in the future are touched, so nothing correct gets moved.
2.8.0
Fixed:
- The analyser could not see headings inside a container. Two GEO checks — “chunkable sections” and “question-and-answer pairs” — only looked at the direct children of the content, so any page whose content sat inside a wrapper div, a Gutenberg Group or Columns block, or a page-builder container was told it had “no headings” and “no question-and-answer pairs” no matter how well it was structured. Pro’s automatic FAQ schema, which uses the same walker, never fired on those pages either. The walker now reads the document in order at any depth.
- Drafts always failed the URL check. An unpublished post’s permalink is still
?p=123, so “focus keyword in URL” failed on every draft. The check now also judges the slug WordPress will use — the saved slug, or the title’s slug before one exists.
Faster:
- Stopped loading an admin-only log on every page view. The Instant Indexing log reaches roughly 19 KB at its 100-entry cap, and it was in WordPress’s autoload set — meaning it was read from the database and unserialised on every single request on the site, including every front-end page view, purely so it could sit unused in memory. It is only ever displayed on its own settings screen. It is now excluded from autoload, and a one-time migration moves it on existing sites. On a measured install this cut the plugin’s autoloaded footprint from 21.1 KB to about 2 KB.
New:
- Find a setting. A search box above the Settings tabs filters the rows on the tab you are on, and when nothing matches it names the tabs whose subject does — “Try: Schema · Advanced” — so you are never left hunting.
- Live character counters under the homepage title and description, coloured for too short, just right, and “Google will cut this”.
- A save bar that tells you. The Save Settings bar now stays in view and lights up the moment something on the tab changes, and the browser warns before you leave with unsaved changes.
2.7.1
Fixed:
- Removed an invalid “Network” header from the plugin file. WordPress only accepts that header when it is set to true, and it should be left out otherwise. It had no effect on how the plugin ran, but it is not valid and WordPress.org’s automated scan rejects it.
- Shipped a proper translation template. The
/languagesfolder the plugin points at was empty, and empty folders do not reliably survive being unzipped — which would leave the plugin pointing at a folder that is not there. It now contains a real POT file covering all 761 translatable strings, so translators have something to work from.
2.7.0
Six new AI abilities, a fix to how content is measured, and WordPress.org submission hardening.
New:
- Test a draft before you save it. A new
analyse-draftability scores a hypothetical title, meta description, focus keyword or rewritten body and returns both scores plus every failing check, without writing anything. Get it right first, then save once. - Compare focus keywords.
compare-keywordsscores a page against up to ten candidate keywords and ranks them best-first, showing which keyword checks each one passes. Choosing a focus keyword was guesswork before this. - Site-wide GEO report.
get-geo-reportsamples your published content and tells you which GEO checks the whole site keeps failing, plus the average GEO score and the weakest pages. Answers “what do I fix everywhere”, not “how is this page doing”. - Internal link suggestions over the API.
suggest-internal-linksexposes the editor sidebar’s link engine, so an assistant can find related content and see what you have already linked. - Bulk SEO updates.
bulk-update-seoapplies titles, descriptions, keywords, schema types and robots flags across up to 50 posts in one call, re-scoring each. Rows apply independently, so one bad post id fails that row, not the batch. - Instant indexing status.
get-indexing-statusreports whether IndexNow is configured, whether it fires automatically, and what it recently submitted. - That takes the free plugin from 9 AI abilities to 15.
Fixed:
- Content measurement no longer welds words together. Stripping HTML replaced each tag with nothing, so
<h2>Key takeaways</h2><p>Costs...collapsed totakeawaysCosts— one nonsense token where there should be two words. On markup written without line breaks between blocks (page builders, imported content, anything minified) this undercounted the word total by roughly a quarter, skewed sentence and paragraph splitting, and made any check looking for a word at a block boundary silently miss. Tags are now replaced with a space, so word counts, readability and keyword matching are correct on every kind of content. - Five code-quality suppressions were silently doing nothing. They used an em dash where PHP_CodeSniffer requires a double hyphen before the reason, so the directive never parsed and the warnings stayed live. Now written correctly.
- An admin tab link was output without escaping. A URL built for the header tab strip skipped
esc_url(). Not exploitable in the shipped code, but it should never have been unescaped. - Every
$_GET,$_POSTand$_SERVERread is now unslashed before it is sanitised. WordPress adds slashes to superglobals, so sanitising without unslashing first can leave a stray backslash in stored values. Affected the setup wizard, the editor meta box, the indexing screen and the admin tab strip. parse_url()replaced withwp_parse_url()in three places. The PHP function returns different things on different PHP versions for edge-case URLs; the WordPress wrapper is consistent.- Translations no longer load early.
load_plugin_textdomain()has been unnecessary since WordPress 4.6 and on modern WordPress it triggers a “called incorrectly” notice. Removed — the same strings still translate, WordPress just loads them when they are first needed. - A sitemap suppression was cancelling itself out. An inline code-checker directive silently replaced the one on the line above it, leaving a warning live.
Improved:
- Documented every third-party service the plugin contacts, what it sends and when, in a new “External services” section — including the IndexNow endpoints and the fact that Health Check only ever requests your own site.
- Verified against WordPress.org’s own Plugin Check review rulesets with zero errors and zero warnings, and against PHP 7.4 through 8.4 with zero compatibility issues.
- Compatibility: tested up to WordPress 7.1.
2.6.0
A separate GEO score, five new AI-citability checks, and AI assistant support.
* New: a GEO score, scored separately from your SEO score. Classic SEO and getting quoted by AI answer engines are not the same job, and one number cannot tell you how you are doing at both. Every page now carries its own 0–100 GEO score alongside its SEO score, so you can see at a glance that a page is strong for Google and weak for ChatGPT — and fix exactly that. Stored per page, so you can sort your whole site by it.
* New: five additional GEO checks, each based on what AI answer engines actually quote:
* Concrete figures — pages carrying real numbers, percentages, prices and dates get cited far more often than vague prose.
* Question-and-answer pairs — a question heading followed by a short, self-contained answer is the single most quotable structure there is.
* Summary block — a “Key takeaways” or “In short” section gives an answer engine a ready-made extract instead of making it guess.
* Chunkable sections — AI systems split pages by heading, so a 900-word run with no subheading gets cut mid-thought and loses the context that made it worth quoting. This check finds those.
* Entity definition — if you never plainly say what your subject is, an answer engine may confidently answer about something else entirely.
* New: AI assistant support. If you connect an AI assistant to your site through an MCP plugin such as WPVibe, it can now do real SEO work: analyse a page and get back both scores plus every failing check in fix-this-first order, rewrite titles and meta descriptions (and see the new score immediately), find your weakest content by SEO or GEO score, run the site audit, re-score content in bulk, and manage your llms.txt and AI-crawler settings. Uses the WordPress Abilities API (WordPress 6.9 and newer).
* Security: every AI action requires the same permission the plugin’s own screens use.
* Fixed: the readme listed 8 tags. WordPress.org only indexes 5 and ignored the rest, so the list is now the 5 that matter.
* Compatibility: tested up to WordPress 7.0.
* On WordPress versions without the Abilities API, nothing changes and the plugin works exactly as before.
2.5.0
Category and tag SEO — the missing editor.
* The output engine has read _dfseo_title, _dfseo_meta_desc and _dfseo_noindex from term meta since v1.0 — in the title builder, the description resolver, the robots directives and the sitemap — but nothing ever wrote them. There was no editor anywhere on the site. Every category, tag and product category was stuck with whatever the automatic fallbacks produced.
* Every public taxonomy now has a full SEO panel: SEO title, meta description, focus keyword, canonical URL, noindex, live character counters and a Google preview.
* The term keys are now registered with WordPress, so they work over the REST API and WP-CLI too. Previously a meta payload sent to /wp/v2/categories/ was silently discarded while the request still returned 200.
* Term list tables gained an SEO column showing at a glance which archives are Set, Partial, Auto or Hidden.
* Terms can now carry their own canonical URL and their own social share image, with WooCommerce category thumbnails used as a sensible fallback.
hreflang for multilingual sites.
* Emits rel="alternate" hreflang tags plus x-default, detecting Polylang, WPML and TranslatePress automatically. Without these, a translated site serves several near-identical URLs per page and search engines have to guess which one to show to whom — frequently guessing wrong, or treating the set as duplicate content.
* Does nothing at all on single-language sites, so it is safe to leave switched on.
* New dfseo_hreflang_alternates filter for regional domains, headless setups, or any multilingual plugin not detected automatically.
WordPress Site Health integration.
* Adds five SEO tests to Tools Site Health, plus a DadsFam SEO panel on the Info tab that is copyable straight into a support request.
* The headline one: “Discourage search engines” detection. That single checkbox in Settings Reading adds a site-wide noindex, is invisible from Site Health unless something puts it there, and is routinely left on by accident after a site is built on staging. Sites sit deindexed for months behind it.
* Also checks: plain permalinks (which break /sitemap.xml and /llms.txt outright), a physical robots.txt overriding the plugin, missing homepage title/description, and other SEO plugins running at the same time.
WP-CLI command suite.
* wp dfseo doctor — full SEO health check over SSH, no browser needed.
* wp dfseo audit --post_type=product --missing=description --format=csv — export exactly what still needs writing.
* wp dfseo rescore --post_type=product — recalculate scores in bulk after an import, a migration, or a change to your title templates. There was no way to refresh stored scores from the dashboard; browser-based bulk work simply times out on a large catalogue.
* wp dfseo sitemap flush|list.
* Costs a normal page load nothing — the file returns immediately unless WP-CLI is actually running.
Other.
* The attachment-page redirect and hreflang now have visible toggles on the Advanced tab.
* Uninstall cleans up term meta and the new transients.
2.4.0
Structured data rebuilt as one connected graph.
* Every JSON-LD node now ships in a single @graph block instead of five separate scripts. Nodes reference each other by @id, so search engines read one entity model for the page rather than a pile of disconnected fragments.
* Fixed: the WebSite node had no @id at all, and was only output on the homepage — while every inner page pointed isPartOf at it. That reference resolved to nothing on every URL except one. WebSite and Organization are now emitted on every page.
* Archives, categories, tags, author pages and search results finally get a page-level node (CollectionPage / ProfilePage / SearchResultsPage). Previously only single posts and pages had one.
* Authors are now a proper Person node with a stable @id reused across the whole site, instead of an anonymous block repeated inside every article — the groundwork for author/E-E-A-T signals.
* Articles gained articleSection, keywords, wordCount, commentCount, thumbnailUrl and isAccessibleForFree.
* The page’s main image is now a referenced ImageObject with real dimensions.
* New dfseo_schema_graph filter for adding, removing or rewriting any node.
Meta descriptions no longer leak page-builder code.
* Auto-generated descriptions now strip shortcodes and block markup first. On Elementor, WPBakery, Divi and Fusion sites, descriptions could previously read [vc_row][vc_column width=1/2] — and that …
