Skip to content

Releases: avansaber/seo-monster

v0.9.2 — Discovery + AI/GEO

Choose a tag to compare

@mailnike mailnike released this 20 Jun 01:04

SEOMonster v0.9.2 — Discovery + AI/GEO

The biggest release since the technical-SEO line: SEOMonster goes from "diagnose my own data" to "discover what I don't, and prove it moved" — including the AI answer surfaces (ChatGPT, Perplexity, Gemini, Google AI Overviews). 11 new tools across four tracks — 59 → 70 tools.

Everything new keeps the project's design law: tools stay deterministic and data-grounded (the host LLM does the generative/semantic work), every score is banded + evidence-tagged (causal / correlational / informational — never a false-precision number), and the free GSC / GA4 / HTTP core needs no new keys. The optional vendors are pluggable and degrade gracefully.

What's new

Track A — AI / GEO citation

  • ai_citation_readiness — is a page structured to be cited by LLM answer engines? Leads with a render-blindness check (AI crawlers don't run JS), then scores evidence-backed signals (statistics, quotations, cited sources, no keyword-stuffing). Reports schema.org / FAQ / llms.txt as informational only — the 2026 evidence doesn't support them as AI-citation drivers. Free.
  • ai_referral_overview — GA4 referral sessions from AI apps (native ai-assistant channel + source regex) and AI-crawler robots coverage (GPTBot/ClaudeBot/PerplexityBot…). Surfaces the ~70% dark-traffic undercount. Free.
  • ai_citation_track — sampled brand share-of-voice across Perplexity / OpenAI / Anthropic / Gemini + Google AI Overviews for a managed prompt set, with a 95% confidence interval and run-to-run volatilitynot an "AI rank" (single runs are statistically meaningless). Honest about the API-vs-UI gap. Optional engine keys / DataForSEO.

Track B — net-new keyword discovery

  • gsc_keyword_expand — ground host-brainstormed candidates against your own Search Console data; net-new terms with no visible footprint, scored by sibling-strength. Free.
  • serp_adjacency_expand — Google Autocomplete (free core) + optional People-Also-Ask / related searches.
  • keyword_universe — competitor keyword gap (the one thing no Google product gives you) + volume/difficulty/intent. Optional (DataForSEO; Google Ads for volume).

Track C — content winnability

  • content_brief_data — competitor heading union, median word-count floor, schema, entities, and 2026 GEO writing directives, so the host writes the brief from evidence. Free.
  • topic_cluster_map — four-quadrant gap (defend / optimize / create / monitor) from your own GSC data; the create quadrant is your missing-subtopic list. Free.
  • content_opportunities gains an additive winnability block (existing fields unchanged).

Track D — close the loop

  • internal_link_recommend — specific source→target internal links from high-authority pages to striking-distance pages, with anchor text and over-optimization guards. Free.
  • rank_change_attribution — did a change move the needle? Difference-in-differences vs a matched control group, a 95% CI, a three-state verdict, and a confounders block that auto-detects the 2025 GSC data-regime breaks. Observational, never a causal claim. Free.
  • onpage_serp_gap — the headings / entities / schema the top results have that your page lacks, as concrete actions. Free with caller URLs; optional SERP auto-fetch adds zero-click-risk + competitor-authority signals.

Optional providers (all pluggable; the core works without them)

  • DataForSEO (DATAFORSEO_LOGIN / DATAFORSEO_PASSWORD) — SERP/PAA, keyword volume/difficulty/intent, competitor gap, Google AIO.
  • Open PageRank (OPENPAGERANK_API_KEY) — free competitor domain authority.
  • AI engines (PERPLEXITY_API_KEY / OPENAI_API_KEY / ANTHROPIC_API_KEY / GEMINI_API_KEY) — for ai_citation_track (any subset).
  • Google Ads (GOOGLE_ADS_DEVELOPER_TOKEN / GOOGLE_ADS_CUSTOMER_ID) — volume alternative to DataForSEO.

Quality & validation

  • Validated live across three rounds against a real portfolio: the full free GSC/GA4/HTTP surface, then the paid surface (DataForSEO + Open PageRank + Gemini) — ai_citation_track ran 42 live queries with full statistical machinery. All findings closed.
  • New system_status tool groups (ai, content, discovery) and optional services (dataforseo, openpagerank, google_ads, ai_engines).
  • 567 tests, ruff clean, security review clean. No breaking changes — every existing tool keeps its contract.

Upgrade

uvx seo-monster@latest        # or your host's MCP config / the .mcpb bundle

No config changes required; the new providers are opt-in. Call system_status to see what's configured.

Full details in CHANGELOG.md.

v0.8.2 - cf_managed_robots (managed robots.txt / Content-Signals control)

Choose a tag to compare

@github-actions github-actions released this 02 Jun 23:24

cf_managed_robots - the managed-robots / Content-Signals control tool, completing the robots feature line (detection 0.8.0 -> advisor 0.8.1 -> control 0.8.2). One new tool (59 tools / 13 prompts).

  • cf_managed_robots(action, zone?, ...) - get / configure / disable Cloudflare's managed robots.txt and Content-Signals policy on a zone (these ride on the Bot Management config; write API confirmed against Cloudflare's public OpenAPI schema, available on all Bot Management plan variants).
    • action="get" is read-only and un-gated; configure / disable are gated behind SEO_MCP_ALLOW_DESTRUCTIVE, need confirm=<zone>, and support dry_run.
    • Safe write path: GET -> overlay only the changed fields -> strip read-only fields -> PUT, so the rest of the zone's Bot Management config is never clobbered. Needs the Bot Management:Edit token scope for writes.
    • Managed robots.txt and the Content-Signals policy are mutually exclusive in Cloudflare; the tool validates this locally and returns INVALID_INPUT (no raw CF 400). Valid combos: managed_robots=true + cf_robots_variant="off" OR managed_robots=false + cf_robots_variant="policy_only".
    • Every response carries a caveat separating the stated-preference signals (ignored by Googlebot, not a ranking factor) from the levers that actually enforce at the edge.

Install: uvx seo-monster or pip install seo-monster==0.8.2. Full notes in CHANGELOG.

v0.8.1 - robots_ai_posture (Content-Signals advisor)

Choose a tag to compare

@github-actions github-actions released this 02 Jun 23:13

robots_ai_posture - the Content-Signals advisor, part 3 of the robots feature line. One new tool (58 tools / 13 prompts).

  • robots_ai_posture(goal?, sitemap_url?) - a deterministic, offline advisor for the Content-Signals levers (search / ai-input / ai-train). Takes a business goal (content_authority default / maximize_visibility / protect_ip), recommends a posture with a plain-language rationale, returns the full trade-off menu, and emits a ready-to-apply artifact: the Content-Signal: directive line plus a complete suggested robots.txt. No network, no writes.
  • Every response carries the mandatory caveat that Content-Signal is honored only by adopting crawlers, is ignored by Googlebot, and is not a ranking factor.

Install: uvx seo-monster or pip install seo-monster==0.8.1. Full notes in CHANGELOG.

v0.8.0 - robots_txt_validate detects managed / stale-edge robots

Choose a tag to compare

@github-actions github-actions released this 02 Jun 23:12

Managed-robots / Content-Signals detection - part 1 of the robots feature line. No new tools or prompts (57 tools / 13 prompts).

  • robots_txt_validate now catches the Cloudflare Managed robots.txt / Content-Signals blind spot: a second cache-busted fetch detects a stale edge-cached robots.txt (and re-parses groups/sitemaps from the FRESH content), plus managed_robots_suspected, missing_sitemap, and content_signals parsing. All advisory; no new scope (FEEDBACK §27).

Install: uvx seo-monster or pip install seo-monster==0.8.0. Full notes in CHANGELOG.

v0.7.11 - IndexNow keyLocation per-host fix + CF polish

Choose a tag to compare

@github-actions github-actions released this 02 Jun 23:10

IndexNow multi-host fix + Cloudflare polish. No new tools or prompts (57 tools / 13 prompts).

  • IndexNow keyLocation derived per submitted host - submissions to a host other than the configured one no longer fail with HTTP 422; the key-file location is derived as https://<submitted-host>/<key>.txt (the v0.7.8 pre-flight had the same bug and is fixed too). FEEDBACK §25.
  • cf_settings_update: unknown settings key now returns the tool's own INVALID_INPUT; cf 9109 remediation broadened; bulk-redirect propagation note clarified (FEEDBACK §24).

Install: uvx seo-monster or pip install seo-monster==0.7.11. Full notes in CHANGELOG.

v0.7.10 - cf_settings_update (close the audit->remediate loop) + CF polish

Choose a tag to compare

@mailnike mailnike released this 02 Jun 19:05

Adds cf_settings_update: write the SEO/crawl/security Cloudflare zone settings cf_settings_audit grades (SSL mode, Always-Use-HTTPS, Automatic HTTPS Rewrites, Brotli, browser cache TTL, HSTS), closing the audit->remediate loop. Gated behind SEO_MCP_ALLOW_DESTRUCTIVE; ssl_mode or any HSTS-raise also need confirm= (HSTS-raise also acknowledge_hsts_risk=true). Validates locally, supports dry_run, and re-runs the audit so the finding clears. Needs the Zone Settings:Edit token scope. cf_settings_audit findings now carry a machine-readable fix hint to chain audit->fix. Also folds CF polish: scope-specific 9109 remediation, cf_create_redirect returns rule_id, per-field bulk reject reasons, corrected DESTRUCTIVE remediation + cf_list_redirects description. 56 -> 57 tools. See CHANGELOG.md.

v0.7.9 - Cloudflare Bulk Redirects (account-level)

Choose a tag to compare

@mailnike mailnike released this 02 Jun 05:15

Adds cf_bulk_redirect_upsert: create/append many redirects at once via an account-level Bulk Redirect List, wired into the account http_request_redirect ruleset (for site migrations). Gated behind SEO_MCP_ALLOW_DESTRUCTIVE and a confirm value equal to list_name. Pre-validates every item locally and rejects the whole batch on any bad item (never half-applies); validates list_name against Cloudflare's allowed charset; supports dry_run. cf_list_redirects now also surfaces account Bulk Redirect lists. Completes CF redirect support (single redirects shipped in 0.7.8). 55 -> 56 tools. New scopes: Account Rulesets:Edit + Account Filter Lists:Edit. See CHANGELOG.md.

v0.7.8 - Cloudflare single-redirect management

Choose a tag to compare

@mailnike mailnike released this 02 Jun 04:47

Adds cf_list_redirects (read), cf_create_redirect and cf_delete_redirect (gated behind SEO_MCP_ALLOW_DESTRUCTIVE) for managing single (dynamic) redirects at the Cloudflare edge - e.g. a 301 for a renamed URL. Creates pre-flight the target (no redirecting to a dead URL), refuse self-loops and duplicate sources, advise 301-over-302, and support dry_run. New token scope: Zone > Single Redirect > Edit. 52 -> 55 tools (13 prompts unchanged). Account-level Bulk Redirects follow in 0.7.9. See CHANGELOG.md.

v0.7.7 - HTTP pre-flight for routine writes

Choose a tag to compare

@mailnike mailnike released this 01 Jun 06:40

gsc_submit_sitemap and indexnow_submit/bulk_submit now HTTP pre-flight the resource they depend on (the sitemap URL; the IndexNow key file) before forwarding upstream, using the branded SEOMonster UA. A 404/unreachable sitemap or a missing/mismatched key file now returns INVALID_INPUT with remediation instead of a false success (the upstreams accept blindly and fail silently downstream). Adds a skip_preflight escape hatch. No new tools or prompts (52 tools / 13 prompts). Closes FEEDBACK §20 §1b/§3c/§3d. See CHANGELOG.md.

v0.7.6 - housekeeping (CI gate, ruff, Node-24, taxonomy, PSI-CrUX note)

Choose a tag to compare

@mailnike mailnike released this 31 May 19:34

Housekeeping batch, no new tools or prompts (52 tools / 13 prompts). psi_analyze + lighthouse_budget gain an additive field_data_note pointing to crux_snapshot/crux_history (PSI CrUX field-data deprecation). technical_seo_audit + structured_data_audit descriptions now name their lane and cross-reference the other audit prompts. New ci.yml runs pytest + ruff on push/PR; pre-existing ruff debt cleared (ruff pinned in dev extra); release.yml opts JS actions onto Node 24 ahead of the 2026-06-16 runner cutover. README tool descriptions synced to the v0.7.x surface. See CHANGELOG.md.