Codesala SEO Content Engine

Descrição

Codesala SEO Content Engine is a free AI SEO plugin and AI content generator for WordPress. It combines keyword research, AI article writing, on-page SEO optimisation, schema markup and an auto-blog scheduler in one lightweight plugin — and it works on activation without any API key thanks to a built-in zero-config engine that composes articles from real Wikipedia summaries and Google News headlines, with linked citations.

Use it as your AI writer, auto blog plugin, keyword research tool, JSON-LD schema generator, and automated content scheduler — all from one admin screen. Compatible with Yoast SEO, Rank Math and All in One SEO.

Why use this AI SEO plugin?

  • Free forever, no API key required. The built-in engine uses only public data sources — no signup, no credit card.
  • Real source-backed content, not template fluff. Every generated article is built from real Wikipedia and Google News data with citation links — useful out of the box.
  • Optional best-in-class AI providers. Plug in your own free or paid key from OpenRouter, Groq, Cloudflare Workers AI, Google Gemini, Mistral, OpenAI, or Anthropic Claude — auto-fallback handles rate-limits.
  • 6 keyword research sources. Google Trends, Google Suggest, YouTube Suggest, Bing Suggest, Reddit and Wikipedia — all free.
  • Schema markup that ranks. JSON-LD Article + FAQPage with safe <script>-context escaping.
  • Auto blog scheduler with safety brakes. Daily budget, per-hour throttle, default draft status — protects you from spammy bursts.
  • Compatible with leading SEO plugins. Auto-detects Yoast, Rank Math and All in One SEO. Native fallback if none is installed.

Full feature list

  • AI content generator with multi-provider fallback chain.
  • Keyword research from 6 free sources (Google Trends, Google Suggest, YouTube Suggest, Bing Suggest, Reddit, Wikipedia Pageviews).
  • Smart keyword scoring — long-tail boost, source-weighted, used-keyword tracking.
  • Source-backed article composer — pulls real Wikipedia summaries + Google News headlines with citation links, even when no LLM is configured.
  • Optional AI providers — OpenRouter, Groq, Cloudflare Workers AI, Google Gemini, Mistral, OpenAI, Anthropic Claude. All keys user-supplied.
  • Royalty-free images — optional Pexels / Unsplash with SEO-optimised ALT text.
  • JSON-LD schema — Article + FAQPage, escaped safely with JSON_HEX_TAG.
  • Yoast / Rank Math / AIOSEO compatibility — focus keyword, meta title and description auto-filled.
  • Auto blog scheduler — WP-Cron driven, daily budget, per-hour throttle, default draft status.
  • Internal linking — picks 3 related posts from your archive on every generation.
  • Sitemap pings — Google + Bing notification on publish (optional).
  • Google Indexing API support (optional, requires service-account JSON).
  • Built-in analytics — views, top posts, top keywords. Cached, no GA needed.

AI providers supported

Provider
Tier
Why use it

Codesala built-in engine
Free, no key
Always-on Wikipedia + News engine

OpenRouter
Free tier
DeepSeek-V3, Llama 3.3 free models

Groq
Free tier
Fastest Llama 3.3 70B inference

Cloudflare Workers AI
Free, 10k/day
Llama, Mistral, Gemma

Google Gemini
Free tier
Gemini 1.5 Flash

Mistral AI
Free tier
Mistral Small / Medium

OpenAI
Paid
GPT-4o-mini, top-quality long form

Anthropic
Paid
Claude 3.5 Haiku / Sonnet

Realistic strategy

AI content is risky if you over-do it. Recommended:

  • 5–10 high-quality posts/day, not 100.
  • Long-tail, low-competition keywords.
  • Default status is draft so you review before publishing.

External services

This plugin connects to the third-party services listed below. Connections to optional services (LLM providers, image providers, indexing) only happen when the site administrator explicitly configures their own API keys for those services.

Wikimedia Pageviews API (when “Wikipedia Top” keyword source is enabled)

Used to fetch the previous day’s most-viewed Wikipedia articles as a keyword discovery source. As of v1.3.0 no Wikipedia content is fetched for article bodies — only article titles are read, to seed the keyword pool.

  • What is sent: language code and the previous day’s date.
  • When: when the keyword pool is refreshed.
  • Service: Wikimedia Pageviews REST API.
  • Terms of use: https://foundation.wikimedia.org/wiki/Policy:Terms_of_Use
  • Privacy policy: https://foundation.wikimedia.org/wiki/Policy:Privacy_policy

Google Trends RSS (when “Google Trends” keyword source is enabled)

Used to fetch daily trending searches.

  • What is sent: country code.
  • When: when the keyword pool is refreshed.
  • Service: Google Trends.
  • Terms of use: https://policies.google.com/terms
  • Privacy policy: https://policies.google.com/privacy

Google Search Suggest & YouTube Suggest

Used to fetch keyword autocomplete suggestions (keyword discovery) and related question phrases for FAQ headings. As of v1.3.0 Google News RSS is no longer used and no article content is taken from Google — only short keyword and question strings are read.

  • What is sent: keyword strings, language and country codes.
  • When: when the keyword pool is refreshed and each time a post is generated.
  • Service: Google.
  • Terms of use: https://policies.google.com/terms
  • Privacy policy: https://policies.google.com/privacy

Bing Suggest (when “Bing Suggest” keyword source is enabled)

Used to fetch keyword autocomplete suggestions.

  • What is sent: keyword strings.
  • When: when the keyword pool is refreshed.
  • Service: Microsoft Bing.
  • Terms of use: https://www.microsoft.com/en-us/servicesagreement
  • Privacy policy: https://privacy.microsoft.com/privacystatement

Reddit Public Listings (when “Reddit Trending” keyword source is enabled)

Used to fetch top posts from r/popular as a keyword source.

  • What is sent: nothing (public listing endpoint).
  • When: when the keyword pool is refreshed.
  • Service: Reddit.
  • Terms of use: https://www.redditinc.com/policies/user-agreement
  • Privacy policy: https://www.reddit.com/policies/privacy-policy

Pexels API (only when the user has entered a Pexels API key)

Used to fetch royalty-free images for generated posts.

  • What is sent: the focus keyword and the user’s Pexels API key.
  • When: each time a post is generated and image fetching is enabled with Pexels selected.
  • Service: Pexels.
  • Terms of use: https://www.pexels.com/terms-of-service/
  • Privacy policy: https://www.pexels.com/privacy-policy/

Unsplash API (only when the user has entered an Unsplash access key)

Used to fetch royalty-free images for generated posts.

  • What is sent: the focus keyword and the user’s Unsplash access key.
  • When: each time a post is generated and image fetching is enabled with Unsplash selected.
  • Service: Unsplash.
  • Terms of use: https://unsplash.com/terms
  • Privacy policy: https://unsplash.com/privacy

OpenRouter (only when the user has entered an OpenRouter API key)

Optional LLM provider used for generating article content.

  • What is sent: the system prompt, the user prompt (containing the focus keyword), the user’s OpenRouter API key, the configured model name, and the site’s home URL as the HTTP-Referer header.
  • When: each time a post is generated and OpenRouter is the active provider.
  • Service: OpenRouter.
  • Terms of use: https://openrouter.ai/terms
  • Privacy policy: https://openrouter.ai/privacy

Cloudflare Workers AI (only when the user has entered Cloudflare credentials)

Optional LLM provider used for generating article content.

  • What is sent: the system prompt, the user prompt (containing the focus keyword), the user’s Cloudflare account ID, API token, and the configured model name.
  • When: each time a post is generated and Cloudflare is the active provider.
  • Service: Cloudflare Workers AI.
  • Terms of use: https://www.cloudflare.com/website-terms/
  • Privacy policy: https://www.cloudflare.com/privacypolicy/

Groq (only when the user has entered a Groq API key)

Optional LLM provider used for generating article content.

  • What is sent: the system prompt, the user prompt (containing the focus keyword), the user’s Groq API key, and the configured model name.
  • When: each time a post is generated and Groq is the active provider.
  • Service: Groq.
  • Terms of use: https://groq.com/terms-of-use/
  • Privacy policy: https://groq.com/privacy-policy/

Google Gemini (only when the user has entered a Gemini API key)

Optional LLM provider used for generating article content.

  • What is sent: the system prompt, the user prompt (containing the focus keyword), the user’s Gemini API key, and the configured model name.
  • When: each time a post is generated and Gemini is the active provider.
  • Service: Google Generative Language API.
  • Terms of use: https://ai.google.dev/gemini-api/terms
  • Privacy policy: https://policies.google.com/privacy

Mistral AI (only when the user has entered a Mistral API key)

Optional LLM provider used for generating article content.

  • What is sent: the system prompt, the user prompt (containing the focus keyword), the user’s Mistral API key, and the configured model name.
  • When: each time a post is generated and Mistral is the active provider.
  • Service: Mistral AI.
  • Terms of use: https://mistral.ai/terms/
  • Privacy policy: https://mistral.ai/privacy-policy/

OpenAI (only when the user has entered an OpenAI API key)

Optional LLM provider used for generating article content.

  • What is sent: the system prompt, the user prompt (containing the focus keyword), the user’s OpenAI API key, and the configured model name.
  • When: each time a post is generated and OpenAI is the active provider.
  • Service: OpenAI.
  • Terms of use: https://openai.com/policies/row-terms-of-use/
  • Privacy policy: https://openai.com/policies/row-privacy-policy/

Anthropic Claude (only when the user has entered an Anthropic API key)

Optional LLM provider used for generating article content.

  • What is sent: the system prompt, the user prompt (containing the focus keyword), the user’s Anthropic API key, and the configured model name.
  • When: each time a post is generated and Anthropic is the active provider.
  • Service: Anthropic.
  • Terms of use: https://www.anthropic.com/legal/consumer-terms
  • Privacy policy: https://www.anthropic.com/legal/privacy

Google Sitemap Ping (when “Auto ping Google” is enabled)

Used to notify Google about updated sitemaps after publishing posts.

  • What is sent: the public URL of the site’s sitemap.
  • When: each time a post is published if “Auto ping Google” is enabled.
  • Service: Google.
  • Terms of use: https://policies.google.com/terms
  • Privacy policy: https://policies.google.com/privacy

Bing Sitemap Ping (when “Auto ping Bing” is enabled)

Used to notify Bing about updated sitemaps after publishing posts.

  • What is sent: the public URL of the site’s sitemap.
  • When: each time a post is published if “Auto ping Bing” is enabled.
  • Service: Microsoft Bing.
  • Terms of use: https://www.microsoft.com/en-us/servicesagreement
  • Privacy policy: https://privacy.microsoft.com/privacystatement

Google Indexing API (only when enabled and a service-account JSON key is configured)

Used to submit individual URLs to Google’s indexing service for faster discovery.

  • What is sent: the public URL of the published post, signed with the user’s Google service-account JWT (via Google’s OAuth 2.0 token endpoint).
  • When: each time a post is published if “Submit to Google Indexing API” is enabled.
  • Service: Google Indexing API + Google OAuth 2.0.
  • Terms of use: https://policies.google.com/terms
  • Privacy policy: https://policies.google.com/privacy

Privacy

This plugin does not collect or transmit visitor personal data. Data sent to the third-party services listed above consists of: keyword strings entered or selected by the site administrator, language/country codes from settings, and (when applicable) the user’s own API keys passed to the corresponding provider. The plugin stores its own data locally in the WordPress options table and a custom wp_csrm_stats table (post id, event type, keyword, provider name, sanitized referer, timestamp). No IP addresses, no cookies, and no visitor identifiers are stored.

Ecrãs

Instalação

  1. Upload the codesala-seo-content-engine folder to /wp-content/plugins/.
  2. Activate the plugin from the Plugins screen.
  3. Go to SEO Content Settings AI Providers. The built-in engine works without any setup. For higher-quality output, paste a free API key (Groq, OpenRouter, etc.).
  4. Open the Keywords tab and click Fetch trending keywords.
  5. Open the Generate tab and create a test post.
  6. When you are ready, enable the plugin in Settings General to let the scheduler run automatically.

Perguntas frequentes

Does this plugin require an API key?

No. The built-in engine builds articles from real Wikipedia summaries and Google News headlines through public endpoints. For higher-quality output you can plug in a free key from Groq, OpenRouter, Cloudflare, Gemini, or Mistral. Paid OpenAI / Anthropic are also supported. All keys are user-supplied.

Will this get my site flagged for spam?

Auto-publishing too many low-quality articles can cause issues with search engines. The plugin defaults to draft status and a per-hour throttle so you stay in control. Recommended: 5–10 posts per day max.

Which SEO plugins are supported?

Yoast SEO, Rank Math, and All in One SEO are auto-detected. If none is active, the plugin outputs its own meta tags and JSON-LD on the front-end.

Where does the keyword data come from?

All free public sources: Google Trends RSS, Google Suggest, YouTube Suggest, Bing Suggest, Reddit r/popular, and Wikipedia Pageviews API. See the “External services” section below for details.

Avaliações

Este plugin não tem avaliações.

Contribuidores e programadores

“Codesala SEO Content Engine” é software de código aberto. As seguintes pessoas contribuíram para este plugin:

Contribuidores

Registo de alterações

1.5.0

  • NEW: Left sidebar navigation + full design refresh. The top tab bar is replaced by a modern vertical sidebar (brand block, icon nav, active-state highlight, sticky on scroll). Every admin page now has a clear page heading, a one-line subtitle and consistent card spacing — the cramped, “stuck together” look is gone. Responsive: the sidebar stacks above the content on narrow screens.
  • NEW: Google Search Console index status. A new “Google” column in the SEO Optimizer shows, per URL, whether Google has indexed it (Indexed / Not indexed / Error). Click “Check Google index status” to inspect every post on the page via the Search Console URL Inspection API. Reuses the same service-account JSON key as the Indexing API — just add the service account to your Search Console property.
  • NEW: One-click “fix not-indexed”. After a status check, every not-indexed URL is automatically submitted to the Indexing API (or delegated to Rank Math Instant Indexing if active), so the crawl request goes out without any extra clicks.
  • Google Site Kit detection. If the Site Kit plugin is installed, the SEO Optimizer notes it (the integration itself uses the stable service-account path, not Site Kit’s private internals).

1.4.5

  • NEW: Auto-index every post / page on publish. The plugin now hooks transition_post_status and submits every published URL (not just plugin-generated content) to Google’s Indexing API. Hand-written posts, imported posts and posts published by other plugins are covered too. Configurable per post type under Settings SEO & Indexing.
  • NEW: Rank Math Instant Indexing integration. If you have the official Rank Math Instant Indexing plugin active, our auto-submit defers to it (we never duplicate the call), so a single daily quota covers both flows. If you don’t have it, our own service-account JSON key path handles the call directly.
  • NEW: Bulk indexer in SEO Optimizer. A “Submit all published URLs” button now sits at the bottom of the SEO Optimizer screen. It iterates every published post / page in the configured types, 20 URLs per AJAX tick, with rate-limit respecting (≈1 req/sec). Pagination is irrelevant — the whole site is processed.
  • NEW: Indexing activity log. The most recent 50 submissions are kept and shown in the SEO Optimizer with colour-coded status pills (OK, delegated to Rank Math, skipped, error with the exact HTTP message).
  • Google sitemap ping endpoint removed. Google deprecated https://www.google.com/ping?sitemap= in June 2023 — it now returns 404. The plugin no longer fires it. Submit your sitemap once via Google Search Console; per-URL signals go through the Indexing API. Bing sitemap ping is still supported (Bing still accepts it).

1.4.4

  • Auto-migrate stale Gemini model on update. v1.4.3 fixed the default model for new installs, but existing installs with gemini-1.5-flash saved in their settings were still hitting the deprecated endpoint and silently falling back to the offline template engine. v1.4.4 adds a lazy, idempotent migration that detects the dead value and bumps it to gemini-2.0-flash automatically on the next admin page load — no user action needed.

1.4.3

  • Fix: Gemini default model updated. Google deprecated gemini-1.5-flash on the v1beta API — every call returned HTTP 404 “model not found”, silently falling back to the offline template engine. The default is now gemini-2.0-flash. Existing installs that still have the old model saved should change it under Settings AI Providers Gemini.

1.4.2

  • Critical: title-body content alignment. When the title says “How to deactivate Instagram account”, the body must contain the actual menu path — not generic productivity advice. The generator prompt now includes a strict ALIGNMENT CONTRACT and an intent-specific instruction block (how-to / buy / review / comparison / definition / hire / news) that tells the LLM exactly what shape the body must take for that keyword’s search intent. Title-as-promise, body-as-delivery — no drift, no padding with “start small, measure each step” filler.
  • Critical: fix provider chain priority. The offline codesala template engine was being tried in 2nd position (before other configured LLMs) because it always reports as configured. It is now strictly LAST in the chain, and only included when the user has explicitly opted in via “Strict AI mode = OFF”.
  • NEW: Strict AI mode setting. When ON (default for new installs), if all configured LLM providers fail (quota / wrong key / rate limit), post generation now ERRORS OUT with a clear message instead of silently producing a generic template post. Find it under Settings AI Providers.
  • NEW: Per-post provider transparency. Every generated post now stores _csrm_provider_used and _csrm_provider_attempts in post meta — you can see which provider actually generated it and which LLMs were attempted first (with their exact error messages).
  • NEW: Admin notice on offline-generated posts. When a post is opened in the editor and was generated by the offline template engine, a yellow notice appears listing exactly which LLM providers were attempted and their failure reasons, with a deep link to the AI Providers settings tab.
  • Dashboard banner copy updated to reflect Strict AI mode state — “Strict mode ON: if this provider fails, generation errors out” vs “Strict mode OFF: offline template engine kicks in”.

1.4.1

  • Admin UI polish. The empty peach badge next to the plugin title in every admin screen now displays a “CS” monogram (no more broken-image look). The redundant “AI” pill in the AI-status banner — which duplicated the “AI” icon on the left — has been replaced with a context-aware tier label (“Free Tier” / “Paid Tier” / “Offline”) so the banner now conveys useful information at a glance. Header spacing was loosened so the title, version pill and subtitle don’t read as one cramped block.

1.4.0

  • Contextual in-body interlinking. A new linker scans the body of every freshly generated article, finds the first natural mention of an existing post’s focus phrase inside a body paragraph, and wraps it as a real inline <a> link. Up to 5 inline links per post, same-category candidates preferred, longest-phrase matches preferred, never matches inside an existing <a>, and the hook intro and closing paragraphs are left alone. The “Related Reading” list at the end is still produced — the two link types feed different SEO signals.
  • Heading hierarchy is now enforced after generation. Any stray <h1> in the body is demoted to <h2> (the post title is the only H1), orphan <h3> headings appearing before any <h2> are promoted to <h2>, and any heading that skips a level (e.g. <h4> after <h2> with no <h3>) is demoted to the correct level. Attributes are preserved.
  • Per-section image queries. The generator prompt now asks the AI for one distinct visual concept per H2 section. Each inline image is fetched with its own query so the three images on a post aren’t visual duplicates of each other. Featured image still uses the broad base query. Inline ALT text is now derived from the H2 the image sits under, not a generic counter.
  • Stronger schema coverage. Every generated post now emits an ImageObject for the featured image (with width/height) and a BreadcrumbList (Home > Category > Post). The FAQPage block stays. Article schema is now conditionally suppressed when Yoast SEO / Rank Math / All in One SEO is active so validators don’t flag duplicate Article JSON-LD.
  • Accordion FAQ. FAQs render as semantic <details>/<summary> accordions — keyboard-accessible, no JavaScript needed, themeable via .csrm-faq-* classes. Prompt now requests 5-8 FAQ pairs (up from 3-5), each Q must contain the focus keyword or a close LSI variant.
  • Tighter content prompt. Focus keyword is now required in the very first sentence (was “near the start”), in the first 30 characters of the title, and in the first 60 characters of the meta description (Google bolds it in the SERP snippet). Every H2 section MUST name a real, specific entity (brand, product, person, city, price band, percentage, year) — generic “imagine a small business” examples are explicitly disallowed.
  • Outline returned in the JSON payload. The AI is asked to return its outline as a separate outline array and its LSI variants as a separate lsi array so future versions can validate structure before publish.

1.3.0

  • No more external content scraping. The built-in offline engine no longer fetches from Wikipedia, Google News, Wikimedia Pageviews or Reddit for article body content. Articles are composed locally from intent-pattern templates and never include scraped facts, quotes or “References” sections. Google Suggest is still used (autocomplete questions only) to seed FAQ phrasings — but FAQ answers are written locally, never copied from search results.
  • Pure-AI articles via configured LLM. When you plug in a free or paid AI provider (Groq, OpenRouter, Cloudflare Workers AI, Gemini, Mistral, OpenAI, Anthropic), the generator now demands 1,500-2,500 word original articles with 5-7 detailed H2 sections (each 180+ words), real-world examples, named brands / prices / years, at least one H3 sub-section, and explicit trade-off opinions. Every article is fully original — no external citation is requested or accepted in the prompt.
  • Stronger anti-fluff prompt. Banned phrases list extended; demand for concrete numbers in every section; ban on “Why this matters”, “Introduction”, “Conclusion” style headings.
  • Better image integration. Default images per post increased to 3. Featured image plus inline images are now spread evenly across H2 sections (not all stacked at the top). Every image gets a keyword-aware ALT text.
  • Defaults updated. words_min 800 1500, words_max 1500 2500, images_per_post 2 3.
  • Set-up nudge on dashboard. A new warning banner appears when the user is on offline mode OR has no image API key configured, with one-click links to the relevant Settings sub-tabs.
  • Backward compatible. Existing user settings preserved; offline engine still works for anyone who chooses to stay key-free, but is now clearly labelled “Offline mode — template engine”.

1.2.1

  • Fix: duplicated “Why this matters / Key things / Common questions” blocks. The fixer’s word-count, density, external-link and internal-link helpers are now idempotent — calling Fix twice on the same post no longer appends the same content twice. Markers csrm-padding-block, csrm-further-reading, csrm-related-reading, csrm-density-summary are used to detect prior runs.
  • NEW: Keyword-pattern aware practical content. The word-count padding is no longer generic boilerplate. The fixer detects the searcher’s intent from the keyword phrase and outputs sections tailored to it:
    • “hire / freelance X” “Where to find a X” + “What you should actually pay” (with real rate bands) + “How to vet” + “Red flags” + “Your next step”.
    • “buy / price / best X” “Decide on the use-case first” + “Where to compare honestly” + “What to ignore” + “Buy vs wait check”.
    • “how to X” “Before you start” + “Shortest path that works” + “Where people get stuck”.
    • “what is X” “Plain-English version” + “Why it gets confusing” + “How to spot a reliable explainer”.
    • “X vs Y” “Better for what” + honest scoring framework.
    • Generic fallback for everything else, still keyword-aware, no boilerplate.
  • Fix: FAQ section no longer echoes news headlines as both Q and A. Built-in engine now derives clean questions from news headlines (“Cost?” “How much does X typically cost?”), uses real news descriptions as answers (not the title), de-duplicates questions, and refuses answers that are just a verbatim source title.

1.2.0

  • NEW: Human-style writer engine. The generator prompt now puts the LLM into a specific writer persona (Journalist / Expert Blogger / Practitioner / Friendly Teacher / No-fluff Reviewer) and enforces voice rules: contractions, mixed sentence length, concrete specifics over vague quantifiers, at least two first-person asides, and an explicit BANNED-PHRASES list that strips ~40 of the most common AI-tell phrases (“delve into”, “in today’s digital landscape”, “navigate the complexities”, “tapestry”, “leverage”, “synergy”, “paradigm shift”, “embark on a journey”, “in conclusion” and many more).
  • NEW: Humanizer post-processor. After generation, every article is run through a humanization pass that swaps any remaining AI-tell phrases, applies natural contractions, varies sentence openings and (optionally) injects short first-person asides into long paragraphs. Three strengths: light, medium (recommended), aggressive.
  • NEW: Per-post Humanize button on the SEO Optimizer page — turn any existing post (yours, AI-generated or imported) into a more human-sounding piece in one click. Bulk-humanize is also available. Original content is backed up so you can Revert.
  • NEW: Author byline + about-author block (E-E-A-T signal). Optional. Configurable name and short bio. Adds “By <name> · Updated <date>” to the top and an About-author block to the bottom.
  • NEW: Call-to-action block. Optional styled button at the end of every generated post.
  • NEW: Audience selector. Set the target audience once; the generator writes vocabulary, examples and reading level for that group.
  • Built-in Flesch reading-ease scorer (exposed via CSRM_Humanizer::readability() and reported after Humanize).
  • All v1.1 settings preserved — backward compatible upgrade.

1.1.1

  • Fix: SEO plugin score columns now reflect the optimised score. After Fix (or Analyse) runs, the score is pushed into Rank Math (rank_math_seo_score), Yoast SEO (_yoast_wpseo_linkdex + _yoast_wpseo_content_score) and All in One SEO (post meta + wp_aioseo_posts.seo_score direct table update). The “N/A” badge in posts-list views now flips to the actual number.
  • When schema is applied, Rank Math’s rank_math_rich_snippet is set to article and Yoast’s _yoast_wpseo_schema_article_type is set to Article, so the “Schema: Off” indicator flips to “Article”.
  • Posts scoring 90+ get marked as Pillar Content in Rank Math.
  • SEO Optimizer table now falls back to the existing Rank Math / Yoast / AIOSEO score when this plugin has not yet analysed the post — no more empty score column for posts you optimised in the SEO plugin’s editor directly.
  • Score badge in the Optimizer table now colours immediately on first render (green ≥90, amber 60–89, red <60).

1.1.0

  • NEW: Business-aware keywords. A new “Business” sub-tab in Settings auto-detects what your site is about (site name, top categories, product categories, recent topics) and builds a niche profile. You can also override every field manually (products / services, location, target audience). The keyword fetcher then mixes business-relevant seeds straight into the trending pool.
  • NEW: 100/100 SEO Optimizer. A new top-level admin page lists posts / pages / products with their current score and one-click fix buttons. Fixes 19 weighted signals from the Rank Math / Yoast / AIOSEO content-analysis rules: focus keyword in title (and at start), meta description, slug, intro, subheadings and image alts; keyword density; URL length; word count; external DoFollow + internal links; numbers and power words in title; table of contents injection; long-paragraph splitting; image presence.
  • NEW: Auto-fix on save. Optional toggle that runs the fixer whenever any supported post is saved.
  • NEW: Per-post SEO meta backup + Revert button. First fix takes a one-time backup of the original title / content / slug so you can roll back from the SEO Optimizer page.
  • NEW: Generator now produces 100/100 posts. Newly generated articles are automatically passed through the fixer before publish.
  • Settings 100/100 Fixer sub-tab to choose which post types are eligible, target score, batch size, and whether to allow AI for content rewrites.

1.0.0

  • Initial public release.