SEOMedic — SEO Booster & Link Auditor

Beschreibung

Broken links, missing meta descriptions, duplicate H1s, unembedded YouTube videos — small technical issues that quietly cost you rankings and clicks every day. SEOMedic finds all of them in one place and gives you the tools to fix them fast.

No more crawling through posts one by one. No more spreadsheets. One dashboard, every issue, fixed in minutes.

🔗 Broken Link Detection

Scan every post and page for broken external links. SEOMedic checks the live HTTP status of each URL and flags anything returning an error. Fix the URL inline — no need to open the post editor — then re-check immediately to confirm.

📝 Missing & Broken Meta Descriptions

See every post missing a meta description in one sorted list. Flags meta descriptions that are too short (rewritten by Google) or too long (truncated in SERPs).

🔍 Focus Keyword Assistant

See every post missing a focus keyphrase. Bulk-sync focus keywords to Yoast SEO or Rank Math with one click.

🧹 Content Pruning & Redirects

Find low-performing posts that drag the rest of your site down. Save 301 redirect targets per post (stored locally — no external service). Decide which trashed posts should redirect somewhere and which should 404 cleanly.

🖼️ Image Optimisation

Rename uploaded image files to SEO-friendly basenames, audit alt-text coverage, and find images embedded without dimensions.

H1 Tag Issues

Posts with more than one H1 confuse search engines. SEOMedic lists every offending post and shows you the exact text of each H1 so you know which ones to demote to H2 or H3.

▶️ YouTube & Video Issues

Three video problems caught in one panel: plain YouTube links that will never auto-embed, Gutenberg embed blocks missing the 16:9 aspect ratio class, and Classic Editor iframes with hardcoded dimensions that break on mobile.

🔀 Internal Link Health

Find orphan posts with no inbound internal links, and spot link opportunities where another post on your site already mentions the topic but does not link to it.

🗺️ Sitemap & Schema Audits

Verify your sitemap is reachable and well-formed. Scan every post for Schema.org markup coverage and surface missing types.

⚡ Core Web Vitals (optional)

Connect a free Google PageSpeed Insights API key and audit your site’s Core Web Vitals (LCP, INP, CLS) per page. The API key is yours — the plugin never proxies through us.

⚙️ Bulk Link Management

Browse every link across your entire site in one table. Apply nofollow, sponsored, UGC, or open-in-new-tab to hundreds of links at once. Find and replace a URL site-wide in seconds.

Works with Yoast SEO and Rank Math

Meta descriptions and SEO titles sync with Yoast SEO or Rank Math if active. Falls back to the native post excerpt when neither is installed.

Want AI generation, Search Console, and Bing?

Those features live in the separate SEOMedic Pro add-on plugin, which you can install alongside this one. Pro adds AI meta/title generation (Claude), Google Search Console integration with CTR opportunity scoring, Bing Webmaster Tools integration, and a Gutenberg post-insights sidebar. Install Pro from your account at the plugin author’s site — it is not hosted here.

External Services

This plugin only contacts third-party services in the cases listed below, and only when you have explicitly opted in or provided your own credentials.

Google PageSpeed Insights API

  • What it does: Retrieves Core Web Vitals (LCP, INP, CLS) for individual page URLs so you can audit performance.
  • When it connects: Only when you have entered a PageSpeed Insights API key under SEOMedic Settings and you run the Core Web Vitals audit.
  • Data sent: The page URL being audited. No post content, no user data.
  • Service URL: https://www.googleapis.com/pagespeedonline/v5/runPagespeed
  • Privacy Policy: https://policies.google.com/privacy
  • Terms of Service: https://developers.google.com/terms

Open PageRank (Keywords Everywhere)

  • What it does: Returns a 0–10 PageRank-style authority score for your own domain, shown on the Backlinks card. This is Open PageRank, not Moz Domain Authority.
  • When it connects: Only when you have entered an Open PageRank API key under SEOMedic Settings, and only when the Backlinks card is loaded or refreshed. Cached for 7 days.
  • Data sent: Your own site’s domain name. No post content, no user data, no visitor data.
  • Service URL: https://openpagerank.com/api/v1.0/getPageRank
  • Privacy Policy: https://www.domcop.com/privacy-policy
  • Terms of Service: https://www.domcop.com/terms-of-service

Freemius

  • What it does: Handles plugin activation, opt-in usage telemetry, and software updates.
  • When it connects: Upon plugin activation (opt-in only — users are shown a notice and can skip data sharing). Also during licence verification and update checks.
  • Data sent: Site URL, WordPress version, plugin version, PHP version, and (if opted in) admin email address.
  • Service URL: https://wp.freemius.com/
  • Privacy Policy: https://freemius.com/privacy/
  • Terms of Service: https://freemius.com/terms/

Source code & build instructions

The React admin UI in admin/build/ is built from the human-readable
TypeScript/TSX sources in admin/src/, which are included in this zip.
No third-party AI/Claude code is bundled into the free distribution —
those features live in the separate SEOMedic Pro add-on plugin.

To rebuild the admin UI from source:

cd admin
npm install
npm run build

Build tool: Vite 6 with @vitejs/plugin-react. See admin/package.json
and admin/vite.config.ts for the full configuration. The output is
written to admin/build/index.js and admin/build/index.css.

Screenshots

Installation

  1. Upload the seomedic-seo-link-auditor folder to /wp-content/plugins/, or install via Plugins Add New in your WordPress admin.
  2. Activate the plugin through the Plugins screen.
  3. Navigate to SEOMedic in the WordPress admin sidebar.

For Core Web Vitals audits (optional):

  1. Get a free Google PageSpeed Insights API key.
  2. Enter it under SEOMedic Settings Performance.

FAQ

Does this work with any theme?

Yes. The plugin operates entirely through the WordPress admin area and the REST API — it is theme-independent.

Which SEO plugins are supported for focus keywords?

Yoast SEO and Rank Math. SEOMedic is compatible with both — use it as an SEO booster alongside either plugin. If neither is installed, the focus keyword is stored in the plugin’s own post meta field.

Will editing links here change my post content?

Yes. When you save a link change the plugin updates the post content in the database via the WordPress REST API, exactly as if you had edited the post in the block editor.

Does this plugin send any data to external servers?

Link checking, meta description scanning, focus keywords, redirect saving, image rename, H1/video/schema/sitemap detection, and internal link health all run entirely within your WordPress site.

Two optional connections exist:

  • If you opt in to Freemius on activation (it shows a notice — you can skip), your site URL, WordPress version, PHP version, and admin email are sent to Freemius for licence management and usage telemetry.
  • If you provide a Google PageSpeed Insights API key and run the Core Web Vitals audit, the plugin sends each page URL to Google PageSpeed Insights.
  • If you provide an Open PageRank API key, the plugin sends your own domain name to Open PageRank to retrieve an authority score.

Nothing else leaves your server.

Does this plugin contain affiliate links?

Yes, and they are labelled „(affiliate link)“ wherever they appear in the plugin.

There are currently two. SEOMedic earns a commission if you buy through either, at no extra cost to you:

  • WordPress-optimized hosting — shown on the loading screen, and only when the dashboard is running slowly.
  • ShortPixel image optimiser — shown in the Oversized images panel, next to the note explaining that SEOMedic deliberately does not compress or convert images itself.

Both are marked rel="nofollow sponsored" so search engines are told about the relationship too, not only you.

Affiliate links never affect what the plugin reports. No audit result, score, or recommendation changes because of a commercial relationship, and no section exists in order to create one. Where the plugin recommends a category of tool it doesn’t compete with — an image optimiser, for instance — it says so because that is the honest answer, whether or not the link earns anything.

Rezensionen

Zu diesem Plugin liegen noch keine Rezensionen vor.

Mitwirkende und Entwickler

„SEOMedic — SEO Booster & Link Auditor“ ist Open-Source-Software. Folgende Menschen haben an diesem Plugin mitgewirkt:

Mitwirkende

Änderungsprotokoll

2.51

  • Changed: the image-optimiser link in the Oversized images panel is now an affiliate link, and is labelled „(affiliate link)“ like the hosting one, with rel="nofollow sponsored". The FAQ disclosure has been updated to list both.
  • Nothing about what the plugin reports changes. The Oversized images panel recommended a dedicated optimiser before there was any commercial relationship, for the same reason it does now: resizing and compressing are different jobs, and this plugin only does the first.

2.50

  • Maintenance: rebuilt release with no functional changes from 2.49 (fresh package).

2.49

  • Changed: affiliate links in the plugin are now labelled „(affiliate link)“ where they appear, with a note explaining that SEOMedic earns a commission at no extra cost to you and that it never affects what the plugin reports. A matching disclosure has been added to the FAQ. There is one such link today — WordPress-optimized hosting, shown only when the dashboard is loading slowly.

2.48

  • New: which element is your LCP, shown under each page in the Core Web Vitals table. An LCP of 3.4s tells you there’s a problem but not what to fix — this names the actual element whose render time is that number, and flags when it’s an image.
  • New: redirect chains. If a page is served through one or more redirects, the row says so and how many milliseconds it costs. Linking the final URL directly removes it — and this is the kind of thing that’s invisible until something measures it.
  • Both come from the PageSpeed response the Core Web Vitals scan already makes. No extra requests, no extra quota.
  • Note: the LCP element depends on which Lighthouse version PageSpeed happens to be running. Google removed the audit it came from and replaced it, so SEOMedic tries the old and new names and simply shows nothing if neither is available.

2.47

  • New: Save original link on every oversized image, next to the Resize button. Resizing overwrites the full-size file and can’t be undone, so this is the one chance to keep a copy. The confirmation now points at it rather than just warning you.
  • Changed: the Oversized images panel now links to an image optimiser for the half of the job it deliberately doesn’t do, and explains the difference — an optimiser shrinks the file it’s given, this decides the file is the wrong size.

2.46

  • New: Oversized images in the Image SEO Audit. Lists originals in your media library that are wider than 2000px or heavier than 300 KB, heaviest first, with dimensions and file size.
  • New: one-click resize for images stored far larger than any page displays them — a 4000px original behind an 800px slot. The file keeps its name and URL, so nothing that links to it breaks. Administrators only, and it warns you first that the original is overwritten and can’t be recovered.
  • This is not an image optimiser, on purpose. Compression and WebP conversion are better handled by a dedicated plugin like ShortPixel, and this won’t undo its work or compete with it. What those plugins don’t do is decide an image is the wrong size — they compress whatever they’re given. That gap is what this fills.
  • Images that are heavy but not oversized are labelled as needing compression rather than offered a resize, because shrinking them wouldn’t help.
  • New: image savings from PageSpeed Insights in the Core Web Vitals table. Google already tells you which images on a page could be smaller and by how much — that data was arriving in every scan and being discarded. Costs no extra requests and no extra quota.

2.45

  • Changed: Biggest Movers now only shows keywords in or near the top 20. Movement between position 27 and 24 isn’t something you can act on, and it was crowding out the rows that matter. A keyword that fell out of the top 20 still appears — that’s the most important thing this card can tell you, so it’s filtered on the better of the two positions rather than on where the keyword sits today.
  • New: Edit and Find links on every row of Biggest Movers — Top 15. The card told you a page was one push from page one without offering any way to act on it. Edit opens the post; Find links jumps to Internal Link Booster to look for pages that could link to it.
  • New: „Load automatically from now on“ on the search-data prompt. That prompt asks once per browser session by design, because fetching Search Console data is the slowest thing on the page. If your dashboard loads comfortably you can now switch it off permanently.
  • Changed: the loading screen said „Auditing focus keywords“ while doing considerably more than that. It now says „Auditing your site“.
  • Fixed: an image tag with no working src was reported twice — once as broken, and once as missing alt text. The second one asked you to describe an image that doesn’t exist, and showed no preview because there was nothing to preview. Broken images are now reported once.
  • Changed: the „Bad filename“ label said something was wrong without saying what. It now reads „Filename says nothing“, and hovering explains that the name is an auto-generated one — a camera export, a screenshot, a numbered upload — which gives Google Image Search no signal about the picture.
  • New: Rename file button on filename issues. Generating a suggested filename previously dead-ended at „copy this and rename it yourself in the Media Library“. It now renames the file and updates every reference to it across your site in one click. Administrators only, and it warns you first that the old image URL will stop working.
  • Fixed: an image preview that failed to load simply vanished, leaving an unexplained gap. It now shows a marker saying the file itself didn’t load — which is a finding worth seeing in its own right.

2.44

  • Fixed: the „Important Upgrade Notice“ shown on the Plugins screen displayed raw HTML markup wrapped around the message, and escaped quote characters inside it, instead of a clean sentence. The update API returns that notice as rendered HTML; WordPress core strips the markup before displaying it, but the Freemius updater only escapes it — which is why this showed on Pro installs and not on the free version. SEOMedic now cleans its own notice before either one displays it. Cosmetic only.

2.43

  • New: Site Speed — autoloaded options, a read-only diagnostic on the Settings page. WordPress loads every option marked „autoload“ on every single request, and plugins you have deactivated or deleted routinely leave theirs behind — dead weight paid for on every page load. Nothing else in wp-admin shows you this; until now the only way to see it was to open the database by hand.
  • Shows the total, the number of options, a plain-English verdict, and the 20 largest entries so you can spot names belonging to plugins you no longer run.
  • It reports and never deletes. A row that looks abandoned can belong to a plugin you are about to reactivate, and the safe way to remove one is to delete that plugin properly from the Plugins screen — deleting runs its uninstall routine, deactivating does not, which is exactly why a deactivated plugin can still be costing you.
  • It does not guess which plugin owns a row. Option names do not map reliably to plugin names, and a confident wrong accusation is worse than no label, because you would act on it.
  • Free for everyone, no external requests.

2.42

  • Fixed: the dashboard could lock the browser up on load, and on larger sites Chrome would show „Page unresponsive“. The internal-link analysis was re-reading and re-parsing the HTML of every post two or three times per page load, because it re-ran each time a new batch of data arrived even though none of it changed what the parse produces. It now parses each post once and reuses the result.
  • Changed: that parsing is also spread across small slices with a pause between them, instead of arriving as one long block. The browser stays responsive to clicks and scrolling while it happens.
  • Changed: the analysis no longer blocks the first paint of the page — the dashboard draws, then the link data fills in.
  • Net effect on a 500-post site: around 4,500 HTML parses per load become around 1,000, and those are spread out rather than run all at once.

2.41

  • Fixed: in Focus Keyword vs Ranking you had to scroll the table sideways to reach Save. The Actions column is now pinned to the right edge, so it stays in view however wide the table gets — and it gets four columns wider once search volume is added.
  • Changed: the small „SEOMedic“ label under every focus keyword is gone. It was there to say which plugin the keyword lives in, but it never varied, so it was noise on every row. Keywords that come from Yoast or Rank Math still say so, because that tells you an edit here writes back into that plugin.
  • New: Hide exact matches checkbox. A row badged „✓ exact“ can still appear under „Needs attention“ — the keyword matches, but another query on the same page earns far more impressions, so a better keyword is available. That is deliberate, and now you can filter those rows out when you only want the genuine mismatches.
  • Changed: the search-volume columns now say focus keyword under the heading. That row shows a focus keyword, a top query, a matched query and a suggestion, and nothing said which one the volume and CPC figures described. They are for the focus keyword — or your unsaved draft, if you have staged one.

2.40

  • Fixed: the Impressions (90d) column in URL Export was not 90-day data. It showed whichever window the dashboard’s 30/90 comparison toggle was on — 30 days by default — under a 90-day heading, in both the table and the exported CSV. It now shows a real fixed 90-day figure, fetched when you open the section.
  • Fixed: the URL Export CSV did not guard against spreadsheet formula injection. A post title beginning with =, +, - or @ was executed as a formula when the file was opened in Excel, Sheets or Numbers. The 2.37 release fixed this for the other exports and missed this one. The file now also carries a byte-order mark, so Excel stops mangling non-Latin titles.

2.39

  • New: Bulk meta descriptions. Tick the posts you want, generate drafts for all of them in one go, review, then save them together. Generating never saves — every result lands as an editable draft, and writing to your posts is always a separate, explicit click.
  • New: Hide noindex in Missing Meta Descriptions. A page you have set to noindex is not in Google, so a missing meta description on it cannot cost you a click. The setting is remembered between visits — the whole point is that those pages stop coming back — and a full Rescan clears it when you want to audit everything.
  • Fixed: that filter now sees noindex set in Yoast and Rank Math, not just noindex set inside SEOMedic. Previously a page you had excluded in your SEO plugin would keep reappearing, which made the filter look broken.
  • Changed: the Impressions column in Missing Meta Descriptions now says (90d) and shows a fixed 90-day figure, so your priority order does not shift when you switch the dashboard’s 30/90 day comparison toggle.
  • New: Top query column in Focus Keyword vs Ranking — the search term Google actually sends the most people to each page for, on every row, with a one-click „use“ to make it that page’s focus keyword. It sits next to the keyword you have set, so deciding whether to change it is a glance rather than an investigation.
  • New: Biggest Movers — Top 15 now shows incoming and outgoing internal links per page, optional search volume for each query, and a 30-day position change alongside the existing 90-day one. A page ranking in the top 15 with no internal links pointing at it is flagged — that is usually the cheapest improvement available.
  • The 30-day figure shows a dash until there is genuinely a month of history behind it, rather than labelling a four-day move as a monthly one.

2.38

  • Fixed: changing the Claude model in Settings did not stick. The „Save and Test Key“ button sits at the top of the settings form and looks like the save button, but it only ever saved the API key — then reported success. Any other change on that form, including the model, was discarded on the next page load. It now saves everything on the form, and is styled so the real Save button is the obvious one.
  • Fixed: the same button was also discarding the AI prompts and the Keywords Everywhere, Open PageRank and PageSpeed Insights keys if you edited them and clicked it.

2.37

  • New: Focus Keyword vs Ranking — a section that answers the question the plugin could never answer before: does each page actually rank for the keyword it targets? Shows the focus keyword beside the query Search Console says the page really earns its traffic from, with position, impressions, clicks, CTR against your own site’s typical CTR at that rank, inbound internal links, and when the post was last updated.
  • Honest about what Search Console can tell you. It returns at most 25 queries per URL, so „not in top 25“ is shown as exactly that — not as „doesn’t rank“ and never as a made-up position 100. A merely related query is labelled and styled as related; its position is never presented as your keyword’s position.
  • Suggests a better focus keyword from queries the page already ranks for, preferring positions 4-20 where a change can actually move things. It stays silent when your keyword is already the right one — a page ranking #3 for its keyword gets no suggestion, because churning it would be a downgrade.
  • Edit any focus keyword inline and save it from the row; syncs to Yoast and Rank Math as usual. Optional ✨ AI suggestion per row reads the page content alongside the query data, using whichever Claude model you selected in Settings.
  • Export the whole table as CSV — including a machine-readable match state per row — to hand to Claude for direction on what to fix first.
  • Optional Keywords Everywhere search volume for the keywords shown (1 credit each, dry-run and confirmation first, as everywhere else). Ranking position comes from Search Console and costs nothing.
  • Fixed: saving a single focus keyword triggered a full-site database scan to recount how many posts were still missing one — a number that save never used. Inline edits on large sites were slow for no reason.
  • Fixed: CSV exports did not neutralise spreadsheet formula injection. A keyword or search query beginning with =, +, - or @ was executed as a formula on opening the file. All exports now guard against this, and add a byte-order mark so Excel stops mangling non-Latin queries.
  • Changed: the Focus Keyword Assistant’s „All Keywords“ tab has been removed. It compared your keyword against the top query without knowing either one’s position, so it could tell you they differed but not whether that mattered. The new section does that job properly. The Assistant keeps its real job: filling in posts that have no keyword at all.

2.36

  • New: Score domains in the External Links table — one click looks up the Open PageRank of every domain you link out to and shows it beside each URL. Useful for spotting a page whose outbound links all point at nothing, and for finding links worth keeping when pruning.
  • Uses Open PageRank (free key, 1,000 lookups a day), not Keywords Everywhere — this button spends no credits. Scores are cached for 30 days per domain, so paging through a large table costs at most one lookup per page.
  • Badges read „OPR 4.2“ rather than a bare number, because the scale is 0–10 and will be misread as Moz DA (0–100) otherwise. A domain Open PageRank has no score for shows „OPR —“; a domain that could not be reached shows nothing at all and is retried on the next click — a failed lookup is never recorded as a zero.
  • Without an Open PageRank key the button explains what to add rather than failing silently. The key lives under SEOMedic Settings.

2.35

  • New: the Backlinks card now lists the domains actually linking to you, scored by Open PageRank, strongest first. This costs no additional Keywords Everywhere credits — the linking domains were already in the response you pay for on every refresh, and were previously counted and discarded. If you have refreshed backlinks before, you were buying this data and throwing it away; it is kept from now on.
  • Scoring uses Open PageRank (free, separate key), so a full backlink profile costs nothing beyond the refresh you already ran. Domains that could not be scored show „—“ rather than zero — not being reached is not the same as scoring nothing.
  • The stored list is capped at 300 domains, and scoring is limited to 200 per refresh so a slow host is not left waiting on a long chain of extra requests. Anything unscored fills in on a later refresh.

2.34

  • New: domain authority on the Backlinks card, via Open PageRank — Keywords Everywhere’s authority product. Add its free API key under SEOMedic Settings (1,000 requests a day, no card). Note the scale: Open PageRank runs 0–10, PageRank-style. It is NOT Moz Domain Authority, which runs 0–100, and the two numbers are not comparable. Costs no Keywords Everywhere credits. Authority is recorded in the history too, so it gains its own over-time comparison.
  • Improved: backlink comparisons no longer pretend to be 30 and 90-day windows. They now compare against the checks you actually made — the most recent one and the oldest on record — each labelled with its real age („43 days ago“). Previously a perfectly good 43-day-old check was discarded for not landing near day 30, and the card said „not enough history yet“ while sitting on usable data.
  • Improved: credit costs are stated as numbers, not warnings. The Backlinks card now shows an estimate based on your own referring-domain count (5 credits each), and the Settings breakdown says plainly that this is the most expensive button in the plugin at up to 5,000 credits per refresh, while Open PageRank costs none.
  • Note: history recorded by 2.33 is preserved — the new format is read alongside the old one.

2.33

  • New: the Backlinks card now shows how your referring-domain count has moved — „vs ~30 days“ and „vs ~90 days“, each stating the age of the snapshot it actually compared against. History starts from this release: Keywords Everywhere cannot supply past figures, and the count was previously overwritten on every refresh, so nothing can be backfilled. Expect „not enough history yet“ until you have refreshed a few times over a couple of months.
  • Fixed: the Backlinks refresh tooltip claimed each refresh „uses one Keywords Everywhere API credit“. It does not. Keywords Everywhere bills 5 credits per referring domain returned, and the plugin asks for up to 1,000 — so a refresh on a well-linked site can cost thousands of credits. The tooltip now says so. Nothing about how often it refreshes has changed; only the warning was wrong.
  • Fixed: the stored backlinks count and the new history were not removed on uninstall. Both are now cleaned up on both the free and Pro uninstall paths.
  • Note on domain authority: Keywords Everywhere’s backlinks endpoint returns no authority, domain rating or page rank field at all — only the linking domain, the target, the anchor text and the URLs. Showing DA would mean adding a second provider with its own API key, so it is not included here.

2.32.1

  • Fixed: no way to tell which model wrote a suggestion. „Generate with AI“ now says which model it will use, and the snippet optimiser reports the model that actually produced the variants — read back from Claude’s own response, so a Settings change that silently didn’t apply is now visible instead of looking identical to one that worked.
  • Fixed: applying a rewritten title and meta gave almost no confirmation. The chosen option is now marked in place — „Saving…“, then a green tick reading „Saved to post“ in Analytics or „Added below — press Save“ in the meta editors, since those genuinely do different things — and the options you didn’t pick dim so the one you took is unmistakable. A save that fails now says so on the option you clicked instead of only in a browser alert.

2.32

  • New (Pro): choose which Claude model the AI features use — Haiku 4.5 (default, fastest and cheapest), Sonnet 5, or Opus 5. Set it under SEOMedic Settings, next to your API key. It applies to meta descriptions, titles, image suggestions, LSI keywords, AI summaries, deep scan and the AEO audit. The snippet optimiser added in 2.31 always uses Opus regardless, since that is the point of it.
  • Fixed: every AI feature would have returned „generation failed“ on any model that reasons before answering. The code read the first block of Claude’s reply as the text, which is true of Haiku but not of Sonnet 5 or Opus 5 — those put their reasoning first, so the answer was read as empty with nothing in the logs to explain it. All ten call sites now find the text properly. This was a prerequisite for offering the model choice at all.
  • Fixed: on a reasoning model, thinking is charged against the same token ceiling as the answer, so short generators (a meta description asks for 200 tokens) could spend the entire budget reasoning and return nothing. Those requests now get enough headroom, and reasoning is kept brief since these are short, well-specified writing tasks.
  • Fixed: Haiku rejects the setting used to control reasoning depth, so it is now only sent to models that accept it — otherwise every generation on the default model would have failed outright.
  • Improved: „Save and Test Key“ now tests against the model you have selected. A key can be valid in general but lack access to a particular model, which the old test could not detect.

2.31

  • New (Pro): a deeper snippet optimiser for pages that already rank but lose the click. Where „Generate with AI“ writes one meta description for a page that has none, this writes three complete title + meta description pairs for a page whose copy is underperforming, and you pick the one to use. Runs on Claude Opus rather than the fast model — slower and more expensive per run, so it is only ever fired by an explicit click.
  • New (Pro): two strategies to choose between, because they pull in opposite directions. „Optimize for SEO“ protects and sharpens relevance to the query the page already ranks for; „Optimize for CTR“ assumes the ranking is safe and spends the snippet competing for the click against everything else on the results page. One is marked „suggested“ based on how the page’s actual CTR compares with what your site typically earns at that position.
  • New (Pro): where a page earns far below typical CTR for its position, the optimiser now says so instead of recommending a rewrite — at that point something on the results page is usually taking the click (an AI Overview, a featured snippet, ads) and new copy may not reach it.
  • Improved: the optimiser reads Search Console itself rather than being handed a summary, so it sees every query the page ranks for with per-query position and impressions — including on the title, which previously received no search data at all.

2.30.2

  • Fixed: the two date-range dropdowns on the „Ranking Over Time“ card could render with the selected label clipped or squeezed, especially on the wider „12 months“/“16 months“ options.
  • New: „Ranking Over Time“ can now drill into specific pages and queries instead of only the site-wide summary — a „Show page & query breakdown“ toggle lists every page/query pair currently ranking in the top 15, ranked by impressions, with position and impressions from both selected windows side by side.
  • New: that breakdown can be copied or exported as CSV — one row per page, with its top query, focus keyword, and every other query it ranks top 15 for bundled into one column. Useful for building a case study straight from the export. Required adding a focus-keyword field to the existing lightweight post lookup used elsewhere in the plugin (no new full-post fetch).

2.30

  • Fixed: GSC/Bing position and keyword snapshot history was quietly capped at ~26 days instead of the ~6 months the plugin has always described. Snapshots moved to a guaranteed-daily background cron a few releases back, but the ring-buffer size was never widened to match — so a 26-slot buffer filled by daily writes gave 26 days, not 26 weeks. Widened to 90 daily entries across GSC position snapshots, GSC keyword snapshots, and Bing position snapshots. Existing installs will take a few days of the daily cron running to build back up to the fuller window; nothing to do on your end.
  • New: „Biggest Movers — Top 15“ card on the main dashboard (Pro), right below the top stats. Ranks pages/queries currently sitting in Google’s top 15 positions by impressions — the ones realistically one push from page one — with each row’s position change over up to the last 90 days. Reads from the local snapshot history, not a live API call, so it doesn’t wait on „Load search data.“
  • New: a „6 months“ option on the Search Analytics page’s date-range selector, alongside 24h/7d/30d/60d/90d.
  • New: „Ranking Over Time“ card on the Search Analytics page (Pro). Pick two window sizes — 3/6/12/16 months — and see site-wide impressions, clicks, CTR and position side by side, both windows ending today. Since the longer window always contains the shorter one, this shows whether your recent stretch is pulling the longer-term picture up or down, not a strict before/after change (the card says so). 16 months is the ceiling because that’s roughly what Google’s Search Console API itself retains — an 18-month window would be asking for history Google has already discarded.

2.19.8

  • New: Missing Meta Descriptions gets a „Hide pages“ toggle to filter the list down to posts only. Display-only — doesn’t affect the header count or CSV export.
  • Improved: in Missing Meta Descriptions, the top GSC query now sits under the impressions count instead of under position — impressions and „what query is driving them“ read together more naturally, and it fills space that used to sit empty.
  • New: URL Export gains an Impressions (90d) column and a Focus Keyword column, shown in the results table and included in the CSV — reuses the same 90-day Search Console window already used elsewhere on the dashboard, no extra API call.
  • New: URL Export can exclude posts carrying a specific tag — a dropdown populated from every tag actually in use. Requires a small backend addition: post payloads now include tag names alongside the tag IDs they already carried.
  • Fixed: both Missing Meta Descriptions and URL Export now explain, inline, when Search Console columns are showing blank because search data hasn’t been loaded this session yet — previously the columns just silently disappeared or showed dashes with no explanation.
  • Improved: the „Load search data“ bar is far more visible (bigger button, warning styling instead of a routine gray strip) and its copy now says plainly that it powers every Search Console/Bing section on the page, not just one, and that a „↻ Sync“ button appears afterward for pulling fresh data anytime.
  • New: a small note on the initial loading screen — if a site is struggling to load even with Low-resource mode on, that’s usually the hosting, not the plugin. Links out to WordPress-optimized hosting.

2.19.2

  • New: a dashboard alert now flags posts that are already earning Search Console impressions but have zero internal links pointing to them — pages nobody links to internally get crawled less often and rank worse than they could, and these ones are already proven to have demand. Click through to Internal Link Booster’s Orphaned Posts tab, which was already there but easy to miss.
  • New (Pro): fixing an orphaned post from that tab now connects to the same before/after ranking tracking as the editor sidebar. „Fix in editor“ opens the suggested source post with the link pre-filled — target and, when a real matching phrase was found in the source’s own text, the anchor too — so inserting it is one click, and that insert is automatically tracked the same way a sidebar-inserted link always has been.
  • New: URL Export — search your posts and pages by title (or title + content) and export every matching URL as a CSV or copy them all to the clipboard at once. Useful for reviewing a batch with Claude or …