

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
1# Ultimate SEO + GEO — LLM-Agnostic SEO Agent23| Attribute | Details |4| --- | --- |5| **Version** | 1.10.2 |6| **Updated** | 2026-08-12 |7| **License** | MIT |8| **Author** | Myk Pono |9| **Homepage** | [lab.mykpono.com](https://lab.mykpono.com) |10| **Platforms** | Claude Code, Cursor, Copilot, Gemini CLI, Codex, Windsurf, Cline, Aider, Devin |1112The definitive SEO and Generative Engine Optimization agent. LLM-agnostic — works on any13platform that reads `AGENTS.md`. Merges Google's official SEO guidance, 2026 GEO research,14and practitioner best practices into one universal framework. Every finding comes with a15clear fix directive — not just diagnosis.1617**Full instructions:** `SKILL.md` is the **routing shell** (§0 + global guardrails + procedure index). Detailed procedures for each § are in `references/procedures/*.md` — read only the file for the section you need. For domain-specific reference data, read the relevant file from `references/` (outside `procedures/`). Load at most **3 files** from `references/` per response (procedure files count toward that limit).1819## 0. Before You Start2021### Routing Index2223| Goal | Read | Run |24|------|------|-----|25| Full scored audit | `references/audit-script-matrix.md`, `references/thinking-framework.md` | `generate_report.py` |26| GEO / AI citations | `references/ai-search-geo.md`, `references/entity-optimization.md` | `robots_checker.py`, `entity_checker.py`, `llms_txt_checker.py` |27| Schema markup | `references/schema-types.md` | `validate_schema.py` |28| Technical / CWV | `references/technical-checklist.md` | `pagespeed.py`, `robots_checker.py`, `security_headers.py` |29| Content / E-E-A-T | `references/eeat-framework.md`, `references/core-eeat-framework.md` | `readability.py`, `article_seo.py` |30| CITE domain audit | `references/cite-domain-rating.md` | `link_profile.py` |31| Backlinks | `references/backlink-quality.md` | `backlink_analyzer.py` |32| Keywords / clusters | `references/keyword-strategy.md` | — |33| Links | `references/link-building.md` | `internal_links.py`, `broken_links.py`, `link_profile.py` |34| Local SEO | `references/local-seo.md` | `local_signals_checker.py` |35| Images | `references/image-seo.md` | `image_checker.py` |36| International / hreflang | `references/international-seo.md` | `hreflang_checker.py` |37| Programmatic SEO | `references/programmatic-seo.md` | `programmatic_seo_auditor.py` |38| Migration | `references/site-migration.md` | `redirect_checker.py` |39| Analytics / myths | `references/analytics-reporting.md` | — |40| Crawl / indexation | `references/crawl-indexation.md` | `sitemap_checker.py`, `duplicate_content.py`, `canonical_checker.py` |41| URL discovery | — | `site_mapper.py` |42| Extensions | `references/optional-extensions-mcp.md` | Optional MCP (DataForSEO, Firecrawl); monorepo: `extensions/README.md` |4344### When NOT to Run a Full Audit4546| User signal | Action |47|-------------|--------|48| **Google Ads / PPC** as the primary ask | Paid-media scope — no organic SEO audit |49| **GA4/GTM setup only** (no organic SEO question) | Measurement checklist only — no fabricated score |50| **Explicitly scoped** task (e.g. "only robots.txt + sitemap") | Stay in that scope |5152### Audit Context: Internal vs. Competitive5354| Signal | Context | What's Allowed |55|---|---|---|56| User says "my site", "our site", "I own" | **Internal Mode** | Full scored audit, all scripts, Execute mode, /100 Health Score |57| External URL the user does not own | **Competitive Mode** | Surface crawl only (homepage + up to 20 pages), no /100 Health Score, output labeled "External Observation Only" |5859**When in doubt, ask:** "Is this your site, or are you analyzing a competitor?"6061### The Three Modes6263**Mode 1 — Audit:** Fetch the site, run checks, produce a scored report. Every finding has severity, evidence, impact, and fix. Output: SEO Health Score + prioritized findings.6465**Mode 2 — Action Plan:** Turn audit findings into a phased, executable roadmap. Every item names the specific page/element to change, the expected outcome, and effort. Output: Implementation Phases table + Quick Wins.6667**Mode 3 — Execute:** Do the work. Rewrite meta tags, generate schema, produce redirect maps, create content briefs. Every execution task ends with a verification step.6869Most requests involve all three in sequence: **Audit → Plan → Execute**.7071### Intake Checklist7273Three questions only — skip any already answered.7475| # | Question | Why |76|---|---|---|77| 1 | **What is the URL?** | Required for all modes |78| 2 | **What is the primary goal?** (traffic / AI citations / local leads / traffic drop / specific keyword) | Determines which modules run first |79| 3 | **Which mode?** Audit / Audit + Plan / Audit + Plan + Execute | Default to all three if unclear |8081### Mode Routing8283```84User request + URL85│86├─ "audit", "analyze", "full check" → Mode 1 → § 287├─ "give me a plan", "roadmap" → Mode 2 → § 16 (run § 2 first if no audit)88├─ "fix this", "generate schema" → Mode 3 → relevant section89├─ Traffic drop / rankings lost → § 10 first, then § 6 / § 490├─ AI citations / GEO question → § 3 first91├─ Domain / CMS migration → § 2092└─ No mode stated + URL → Mode 1 → 2 → 393```9495### Context Budget Awareness9697If running on a model with limited context or execution time, apply graceful degradation:981. A full audit with `generate_report.py` can produce 50k+ tokens. Under 32k budget → scoped audit only.992. Prefer partial delivery over timeout. Deliver what you have with a note on skipped sections.1003. Web fetches are expensive. For scoped tasks, answer from description rather than crawling.101102---103104## 1. Request Detection & Routing105106| Request Type | Trigger Keywords | Go To |107|---|---|---|108| **Full Audit** | "audit", "analyze my site", "full check", "site review" | § 2 |109| **Traffic Drop** | "traffic dropped", "lost rankings", "core update" | § 10 → § 4 / § 6 |110| **GEO / AI Search** | "AI Overviews", "ChatGPT", "Perplexity", "GEO", "llms.txt" | § 3 |111| **Technical SEO** | "crawl", "robots.txt", "Core Web Vitals", "speed", "indexing" | § 4 |112| **Schema** | "schema", "JSON-LD", "rich results", "structured data" | § 5 |113| **Content / E-E-A-T** | "content quality", "E-E-A-T", "thin content", "CORE-EEAT" | § 6 |114| **Content Pruning** | "old content", "content decay", "refresh", "consolidate" | § 6b |115| **Keywords** | "keywords", "content gaps", "what should I write" | § 7 |116| **Topic Clusters** | "topic cluster", "content strategy", "pillar page" | § 7b |117| **AEO / Snippets** | "featured snippet", "PAA", "voice search" | § 7c |118| **Competitors** | "competitors", "benchmark", "compare to" | § 8 |119| **Links** | "backlinks", "internal links", "anchor text" | § 9 |120| **Analytics** | "GA4", "Search Console", "CTR", "rank tracking" | § 10 |121| **Crawl & Indexation** | "sitemap", "canonical", "index bloat", "noindex" | § 11 |122| **Local SEO** | "local", "Google Business Profile", "map pack", "NAP" | § 12 |123| **Images** | "images", "alt text", "WebP" | § 13 |124| **International** | "hreflang", "multi-language", "international" | § 14 |125| **Programmatic SEO** | "programmatic", "at scale", "city pages" | § 15 |126| **Strategy / Roadmap** | "SEO plan", "roadmap", "strategy" | § 16 |127| **Maintenance** | "what should I check", "monthly SEO" | § 17 |128| **Migration** | "moving domains", "CMS migration", "redirect map" | § 20 |129| **Myths** | "does X help SEO?", "is X a ranking factor?" | § 18 |130| **Scripts** | "run a check", "generate a report", "validate schema" | § 21 |131| **SEO Drift** | "drift", "what changed", "before/after", "deployment check" | § 22 |132| **Semantic Clustering** | "SERP overlap", "content hub", "cluster analysis" | § 23 |133| **E-commerce SEO** | "product schema", "e-commerce", "product pages", "merchant" | § 24 |134| **Maps / Advanced Local** | "geo-grid", "GBP audit", "review intelligence", "NAP audit" | § 25 |135| **Content Brief** | "content brief", "brief for writers", "writing brief" | § 7 |136| **Google API Tiers** | "API tier", "connect GSC", "GA4 data", "CrUX history" | § 21 |137| **Paid ads primary** | "Google Ads", "PPC" without organic SEO ask | Out of scope |138139---140141## 2. Full Site Audit142143**In a bash-capable environment:** Run `python scripts/generate_report.py https://example.com --output report.html` first. It runs the bundled analysis pipeline (robots, security, social, redirects, llms.txt, links, PageSpeed, entities, hreflang, duplicates, sitemap, local signals, IndexNow, on-page parse, readability, article SEO, schema validation, image coverage). Then use `finding_verifier.py` to deduplicate.144145### Evidence Integrity146147Do not state metrics unless the corresponding script ran:148149| Claim | Only state if |150|---|---|151| LCP / INP / CLS | `pagespeed.py` ran or user provided PSI output |152| Backlink count | `link_profile.py` ran |153| Organic traffic numbers | GSC / GA4 access confirmed |154| Health Score /100 | Internal Mode + minimum 5 scripts ran |155| Schema errors | `validate_schema.py` ran |156| Schema "not found" on CMS site | Confirmed via Rich Results Test — raw HTML cannot detect JS-injected schema |157158**When data is absent:** replace with `[metric] not measured — run [script] for actual data`.159160### Audit Process1611621. **Fetch** homepage + 5–10 representative pages.1632. **Detect business type** (SaaS, E-commerce, Local, Publisher, Agency). Load `references/industry-templates.md`.1643. **Run all audit modules** in sequence.1654. **Score** using Health Score weights below.1665. **Assign confidence**: High (8+ pages + analytics) / Medium (4–7 pages) / Low (1–3 pages).1676. **Audit assumptions** — Before assembling recommendations, list every assumption the audit relies on (e.g., "homepage represents site quality", "CMS is server-rendered"). Surface in the report so the user can reject or correct them. See `references/thinking-framework.md`.1687. **Prioritize** — Critical → High → Medium → Quick Wins. Apply the PERCEIVE → ANALYZE → VALIDATE → ACT framework to ensure findings are grounded, falsifiable, and dependency-mapped.169170### SEO Health Score Weights171172| Category | Weight |173|---|---|174| Content Quality / E-E-A-T | 22% |175| Technical SEO | 18% |176| On-Page SEO | 15% |177| Link Authority | 12% |178| Schema / Structured Data | 10% |179| Core Web Vitals | 8% |180| AI Search Readiness (GEO) | 8% |181| Images | 4% |182| Local SEO (if applicable) | 3% |183184### Finding Format185186Every finding must use this structure:187188```189Finding: [what the issue is]190Evidence: [what was observed]191Impact: [how this hurts rankings, traffic, or citations]192Fix: [specific, actionable step]193Confidence: Confirmed / Likely / Hypothesis194Falsifiability: [what evidence would prove this recommendation wrong or unnecessary]195Leading Indicator: [what metric to monitor post-fix, and over what timeframe]196```197198For Critical and High findings, also include:199```200First-Principle Observation: [the raw observable fact that triggered this finding]201Dependency: [what other findings this blocks, enables, or depends on]202```203204**Scoring:** `base_score = (positive_signals / (positive_signals + deficit_signals)) × 100`. Deduct: Critical −15 pts, Warning −5 pts.205206### Audit Output Template207208```209# SEO Audit Report — [site.com]210Date: [date] | Business Type: [type] | Audited Pages: [N] | Confidence: High/Medium/Low211212## SEO Health Score: XX/100213214| Category | Score | Status |215|---|---|---|216| Content Quality / E-E-A-T | XX/100 | ✅/⚠️/❌ |217...218219## Executive Summary220## Assumptions Audit221[List assumptions the audit relies on so the user can reject or correct them]222## 🔴 Critical Issues (fix immediately)223## 🟠 High Priority (fix this week)224## 🟡 Medium Priority (fix this month)225## ⚡ Quick Wins (under 2 hours each)226## Full Findings [Finding/Evidence/Impact/Fix/Confidence/Falsifiability/Leading Indicator format]227```228229### Mode 2 Plan Format230231| Action | Owner | Effort | Expected Outcome | Phase | Blocked By | Unblocks |232233Plans use **dependency-graph sequencing**: topologically sorted so prerequisite actions come first, parallelizable actions are grouped together, and no action is scheduled before its blockers complete. See `references/procedures/02-full-site-audit.md` (Mode 2 Plan Entry Format) for full format.234235### Mode 3 Execute + Verify236237**Before producing Execute output, classify the change:**238239| Classification | Change Types | Action |240|---|---|---|241| **Safe** | Meta descriptions, title tags, alt text, schema, content rewrites, llms.txt | Output directly |242| **High-Risk** | robots.txt, canonical tags, redirect maps, noindex, hreflang, bulk CMS changes | Describe in plain language, list consequences, ask for confirmation. Do NOT output code until user confirms. |243244---245246## 3. GEO — AI Search Visibility247248GEO = getting content cited by AI engines: Google AI Overviews, AI Mode, ChatGPT Search, Perplexity.249250### GEO Quick Check251252| # | Question | If No → Fix |253|---|---|---|254| 1 | AI crawlers (OAI-SearchBot, PerplexityBot) allowed in robots.txt? | Remove **only** Disallow rules (or `*` blocks) that block those AI crawlers — see scoped rule below |255| 2 | Page answers target query in first 60 words? | Move answer to opening paragraph |256| 3 | Content in raw HTML (not JS-only)? | Implement SSR |257| 4 | Named author with credentials + publication date? | Add author bio + date |258| 5 | Brand mentioned on YouTube or Reddit? | Start presence on missing platform |259260### robots.txt: GEO vs traditional crawl directives261262- **GEO guidance applies to AI-named crawlers** (e.g. OAI-SearchBot, PerplexityBot, GPTBot, ClaudeBot) and to `User-agent: *` rules that effectively block them from important content.263- **Do not** recommend removing **Googlebot/Bingbot** `Disallow` rules used for facets (`/*?`), filtered URLs, pagination, category/author paths, or other intentional crawl hygiene **unless** the user explicitly asks for a crawl-budget or indexation review of those rules.264- `robots_checker.py` focuses on AI crawler status; it does **not** flag facet or low-value-path disallows as errors — do not over-generalize GEO fixes into “remove all Disallow.”265266### GEO Score Components267268| Dimension | Weight |269|---|---|270| Citability (answer in first 40–60 words, 134–167 word blocks) | 25% |271| Structural Readability (H1→H2→H3, question headings, tables) | 20% |272| Authority & Brand Signals (author, date, Wikipedia/Reddit/YouTube) | 20% |273| Technical Accessibility (AI crawlers, SSR, llms.txt) | 20% |274| Multi-Modal Content (text + images + video) | 15% |275276**Key insights:**277- 44.2% of AI citations come from the first 30% of content.278- Content under 3 months old receives ~3x AI citation rate (SE Ranking, 2026).279- AI Overviews and AI Mode share only 13.7% URL overlap — treat as distinct citation engines.280- Google confirmed (June 2026) that **Search ignores llms.txt** — implement as non-Google AI hygiene only.281282For full GEO audit steps, citation demonstration pattern, entity optimization, and platform-specific playbooks → read `references/procedures/03-geo-ai-search.md` and `references/ai-search-geo.md`.283284Scripts: `robots_checker.py`, `entity_checker.py`, `llms_txt_checker.py`, `social_meta.py`285286---287288## 4. Technical SEO289290### Core Web Vitals (INP replaced FID March 2024 — FID removed from CrUX/PSI Sept 2024; Lighthouse never reported FID)291292| Metric | Good | Needs Improvement | Poor |293|---|---|---|---|294| **LCP** | < 2.5s | 2.5–4.0s | > 4.0s |295| **INP** | < 200ms | 200–500ms | > 500ms |296| **CLS** | < 0.1 | 0.1–0.25 | > 0.25 |297298### Key Technical Checks2993001. Run PageSpeed Insights (`pagespeed.py`). If it fails, say "performance data unavailable."3012. Check robots.txt — AI crawlers not disallowed. `Google-Extended` blocks Gemini training only, not Google Search. `GPTBot` blocks training only, not ChatGPT Search (that uses `ChatGPT-User`).3023. HTTPS everywhere. Mixed content → force via 301.3034. Canonical tags — self-referencing, absolute URLs, no chains. Run `canonical_checker.py`.3045. Redirect chains — collapse to direct redirect.3056. Mobile rendering — touch targets ≥48×48px, font ≥16px.3067. Soft 404s — `broken_links.py` detects them.3078. Security headers — HSTS, X-Frame-Options. Run `security_headers.py`.3089. JavaScript rendering — key content absent from raw HTML = invisible to AI bots.30910. Open Graph + Twitter Card — `og:title`, `og:description`, `og:image`.310311For full technical audit steps and CWV fix patterns → read `references/procedures/04-technical-seo.md` and `references/technical-checklist.md`.312313Scripts: `pagespeed.py`, `robots_checker.py`, `redirect_checker.py`, `security_headers.py`, `broken_links.py`, `sitemap_checker.py`314315---316317## 5. Schema / Structured Data318319Always use JSON-LD. Schema improves AI citation likelihood ~2.5×.320321### Priority Schema by Site Type322323| Site Type | Essential Schema |324|---|---|325| Publisher / Blog | Article, Person, ProfilePage, Organization, WebSite, BreadcrumbList |326| SaaS | WebApplication/SoftwareApplication, Organization, WebSite |327| E-commerce | Product + Offer, AggregateRating, Organization, BreadcrumbList |328| Local Business | LocalBusiness (specific subtype), Organization, AggregateRating |329330**Caveat:** `web_fetch`/`curl` cannot detect JS-injected schema (Yoast, RankMath). Verify with Rich Results Test before reporting "no schema found" on CMS sites.331332For schema templates, validation checklist, retired types, and AEO schema → read `references/procedures/05-schema-structured-data.md` and `references/schema-types.md`.333334Script: `validate_schema.py`335336---337338## 6. Content Quality & E-E-A-T339340E-E-A-T is universal for all competitive queries (December 2025). AI content acceptable if genuine E-E-A-T; penalized without unique value. Google AI Mode (180+ countries) delivers zero blue links — AI citation is the only visibility.341342**Functional page exemption:** Sign up, sign in, log in, register, create account, forgot/reset password, membership enroll, checkout, cart, account dashboard, profile settings — these are task-completion UI pages. Do NOT flag them as thin content. Do NOT recommend adding more copy. Applicable checks: title accuracy, meta description, form labels, trust signals, schema.343344Key checks (content/marketing pages only): Named author with credentials? First-hand experience signals? Word count floors (blog 1,500+, service 800+, homepage 500+) — but thoroughness matters more than count. Thin content signals: copied definitions, no original research, no author bio.345346For the full E-E-A-T scoring framework, CORE-EEAT 80-item benchmark, and CITE domain rating → read `references/procedures/06-content-eeat-and-pruning.md` and `references/eeat-framework.md`, `references/core-eeat-framework.md`, `references/cite-domain-rating.md`.347348Scripts: `article_seo.py`, `readability.py`, `duplicate_content.py`349350---351352## 7–8. Keywords, Topic Clusters, AEO & Competitors353354**Keywords (§ 7):** Classify by intent (Informational/Commercial/Transactional). Identify funnel gaps (TOFU/MOFU/BOFU). Opportunity Score: `(Volume × Intent Value) / Difficulty`. → `references/keyword-strategy.md`355356**Topic Clusters (§ 7b):** Pillar page (3,000–5,000 words) links to all cluster posts. Cluster posts (1,500–2,500 words) link back. Enforce bidirectional linking. No two posts targeting the same primary keyword.357358**AEO / Featured Snippets (§ 7c):** Answer in 40–60 words after question-format H2/H3. Lists: 5–9 items. Tables: ≤4 columns. Lead with direct answer. → `references/schema-types.md` for Speakable/SearchAction.359360**Competitors (§ 8):** Identify 3–5 competitors. Assess across: content depth, missing clusters, schema, AI citations, E-E-A-T, AI crawler config, llms.txt. Run `robots_checker.py` and `llms_txt_checker.py` on competitors (label "External Observation Only").361362---363364## 9. Link Building & Internal Linking365366Internal linking first — highest leverage, zero cost. Orphan pages = zero allowed. Anchor text: 40–50% branded, 5–10% exact match (>20% = over-optimization). Link density: 3–5 per 1,000 words. Never recommend paid link schemes.367368Scripts: `internal_links.py`, `broken_links.py`, `link_profile.py` → `references/link-building.md`369370---371372## 10. Analytics & Reporting373374Minimum stack: GSC, GA4, PageSpeed Insights, rank tracker. Traffic drop diagnostic: impressions dropped → ranking issue; impressions stable + clicks fell → SERP feature change (AI Overviews absorbing clicks). AI traffic: Perplexity = `perplexity.ai` referral; ChatGPT = no referrer (Direct).375376→ `references/analytics-reporting.md`377378---379380## 11. Crawl & Indexation381382Crawl budget rarely matters under 500 pages. Key checks: `site:domain.com` discrepancy, GSC Coverage status pages, sitemap URL health, search/template URLs in sitemap (must be noindexed), soft 404s, canonical conflicts, broken internal links. `<priority>` and `<changefreq>` tags are ignored by Google/Bing — omit them.383384For canonical validation steps, GSC remediation tables, and "Google chose different canonical" fixes → read `references/procedures/11-crawl-indexation.md`.385386Scripts: `sitemap_checker.py`, `canonical_checker.py`, `internal_links.py`, `broken_links.py`, `duplicate_content.py`387388---389390## 12. Local SEO391392Check GBP claimed + complete. NAP consistency character-for-character. Review profile (≥4.3 stars, ≥50 reviews). LocalBusiness schema with geo coordinates. Location page quality gates: 30+ pages need local content; 50+ pages = hard stop (March 2024 Core Update target). Never recommend fake reviews.393394Script: `local_signals_checker.py` → `references/local-seo.md`395396---397398## 13. Image SEO399400Alt text (10–125 chars), WebP format, file sizes (thumbnails <50KB, content <100KB, heroes <200KB), `srcset` + `sizes`, never lazy-load LCP image, `fetchpriority="high"` on LCP, `width`/`height` on all `<img>`.401402Script: `image_checker.py` → `references/image-seo.md`403404---405406## 14. International SEO & Hreflang407408ISO 639-1 codes (`en-GB` ✅, `en-uk` ❌). Self-reference required. Return tags required. `x-default` required. Chinese needs script qualifier (`zh-Hans`/`zh-Hant`). Japanese = `ja` (not `jp`). Canonical alignment — hreflang only on canonical URLs.409410Script: `hreflang_checker.py` → `references/international-seo.md`411412---413414## 15. Programmatic SEO415416Quality gates: >100 pages = warning; >500 pages OR <30% unique content = hard stop; <40% differentiation = thin content risk. Publish in batches of 50–100. Never approve city pages where only the city name changes.417418Script: `programmatic_seo_auditor.py` → `references/programmatic-seo.md`419420---421422## 16. Strategy & Roadmap423424Triage: `(Business Impact × Ranking Impact) / Effort`. Map dependencies between actions (Blocked By / Unblocks), topologically sort, then group into four phases:425426| Phase | Timeframe | Focus |427|---|---|---|428| Foundation | Weeks 1–4 | Technical fixes, canonical strategy, analytics, schema |429| Expansion | Weeks 5–12 | Content creation, internal linking, Local SEO |430| Scale | Weeks 13–24 | Content clusters, link building, GEO, images |431| Authority | Months 7–12 | Thought leadership, digital PR, original research |432433---434435## 17–18. Maintenance & Myths436437**Monthly maintenance:** Run through technical health, content & rankings, GEO/AI Search, Local SEO, analytics integrity. Pages losing impressions 3+ months → flag for refresh.438439**Myths:** Meta keywords tag is ignored. Word count has no minimum. Core Web Vitals are a tiebreaker not primary factor. E-E-A-T describes quality but is not a direct ranking factor. → `references/analytics-reporting.md`440441---442443## 19. Quality Gates & Hard Rules444445### Audit Self-Evaluation (run before delivering any audit)446447| # | Check | Fail Action |448|---|---|---|449| 1 | Every Critical/High finding has Evidence from actual data | Add evidence or downgrade severity |450| 2 | No fabricated metrics (PSI/CrUX numbers only if script ran) | Strip numbers; say "not measured" |451| 3 | Health Score supported by findings distribution | Recalculate |452| 4 | Finding/Evidence/Impact/Fix/Confidence/Falsifiability/Leading Indicator all present | Add missing fields |453| 5 | No duplicate findings | Merge duplicates |454| 6 | Scope respected (Internal vs. Competitive) | Re-label |455| 7 | Fix directives name specific element/page/file | Rewrite vague fixes |456| 8 | No YMYL schema without verified credentials | Suggest safer alternatives |457| 9 | No low-value mass changes (10+ pages, zero impact) | Remove or downgrade |458| 10 | No removing valid schema (e.g. HowTo still valid despite no rich results) | Change to "keep" |459| 11 | High-Risk deliverables withheld until user confirms | Remove code; describe in plain language |460| 12 | Assumptions explicitly surfaced in Assumptions Audit section | Add section; revise assumption-dependent findings |461| 13 | Every recommendation is falsifiable | Add falsifiability or demote to informational note |462| 14 | Mode 2 plans use dependency sequencing (Blocked By / Unblocks) | Reorder plan; add dependency columns |463464### Hard Rules465466- **INP not FID** — FID removed from Chrome's field-data tools (CrUX API, PageSpeed Insights) September 9, 2024. Lighthouse (lab tool) never reported FID.467- **Mobile-first complete** — all sites since July 2024.468- **E-E-A-T universal** — all competitive queries, December 2025. Google publishes no numeric E-E-A-T weights; only that "trust is most important."469- **AI citation ≠ ranking** — 85% of retrieved pages never cited. Being retrieved is necessary but not sufficient.470- **Mentions > Backlinks for AI** — 0.664 vs. 0.218 correlation.471- **Blocking AI crawlers harms GEO** — removes site from AI search entirely.472- **GPTBot ≠ training only** — blocking also limits ChatGPT Search citation.473- **Google Search ignores llms.txt** — confirmed June 2026. Implement as non-Google AI hygiene only.474- **AI Mode is a distinct citation engine** — only 13.7% URL overlap with AI Overviews (Ahrefs, 540K query pairs). Optimize separately.475- **Content recency boosts AI citations** — content under 3 months old receives ~3x citation rate (SE Ranking, 2026).476- **Back-button hijacking** — Google spam policy. Sites manipulating browser back-button behavior risk manual action.477- **FAQ rich results retired** — Google retired FAQ rich results for ALL sites on May 7, 2026. Keep existing FAQPage as AI/entity signal; do not recommend for Google rich results. Use QAPage for genuine Q&A.478- **Retired schema (safe to remove):** SpecialAnnouncement, ClaimReview, VehicleListing, Practice Problem, EstimatedSalary, LearningVideo, EnergyConsumptionDetails, CourseInfo. Note: Dataset is NOT discontinued.479- **HowTo / FAQPage:** Rich results removed but schema still valid — do NOT recommend removal.480481---482483## 20. Site Migration484485High-risk — poor migrations cause 30–90% traffic loss. Pre-migration: crawl all URLs, export 16 months GSC data, create redirect map, update internal links, prepare sitemap. Migration day: deploy 301s, spot-check 20–30 URLs, submit sitemap. Post-migration: monitor GSC for 404 spikes.486487Script: `redirect_checker.py` → `references/site-migration.md`488489---490491## 21. Script Toolbox492493**Run scripts as black boxes.** Always try `python scripts/<name>.py --help` first. Do not read source code unless `--help` is insufficient.494495### Setup496497```bash498pip install -r requirements.txt499```500501### Full-Site Report502503```bash504python scripts/generate_report.py https://example.com --output seo-report.html505```506507### All Individual Checks508509```bash510bash scripts/run_individual_checks.sh https://example.com511```512513### Script Reference514515| Script | Purpose |516|---|---|517| `generate_report.py` | Full-site HTML/XLSX/PDF dashboard (runs all scripts) |518| `validate_schema.py` | JSON-LD validation |519| `robots_checker.py` | robots.txt + AI crawler access |520| `pagespeed.py` | Core Web Vitals via PageSpeed API |521| `hreflang_checker.py` | All 8 hreflang rules |522| `internal_links.py` | Link graph, orphan pages, anchor text |523| `broken_links.py` | 4xx/5xx broken links + redirect counts |524| `redirect_checker.py` | Redirect chain analysis |525| `security_headers.py` | HSTS, CSP, X-Frame-Options |526| `entity_checker.py` | Wikidata, Wikipedia, sameAs entity signals |527| `llms_txt_checker.py` | llms.txt presence + format |528| `indexnow_checker.py` | IndexNow key file validation |529| `social_meta.py` | Open Graph + Twitter Card |530| `readability.py` | Flesch-Kincaid grade |531| `duplicate_content.py` | Near-duplicate detection |532| `article_seo.py` | Article structure + keyword analysis |533| `link_profile.py` | Link equity distribution |534| `backlink_analyzer.py` | 7-section backlink audit (CSV/API data) |535| `finding_verifier.py` | Deduplicates findings across audit |536| `sitemap_checker.py` | Sitemap discovery + sanity check |537| `local_signals_checker.py` | LocalBusiness / tel / address signals |538| `image_checker.py` | Image alt coverage |539| `canonical_checker.py` | Canonical tag validation |540| `meta_lengths_checker.py` | Title / meta description / H1 lengths |541| `programmatic_seo_auditor.py` | Quality gates for pages at scale |542| `fetch_page.py` | Fetch and save raw HTML (utility) |543| `crawl_adapter.py` | Pluggable crawl backend (requests/firecrawl/playwright) |544| `site_mapper.py` | URL discovery via sitemap + crawl |545| `drift_monitor.py` | SEO drift baseline, compare, history, report (17 rules) |546| `topic_cluster.py` | SERP-overlap topic clustering (CSV input) |547| `content_brief.py` | Content brief generation from competitor analysis |548| `ecommerce_schema.py` | E-commerce schema validation (Product, Offer, Return, Shipping) |549| `maps_checker.py` | Advanced local SEO / GBP schema audit |550| `google_api_tier.py` | Detect available Google API credentials (Tier 0–2) |551| `crux_history.py` | CrUX History API — historical CWV data (Tier 0) |552| `gsc_query.py` | Google Search Console queries (Tier 1, OAuth) |553| `ga4_report.py` | GA4 organic traffic data (Tier 2, OAuth) |554| `pdf_charts.py` | SVG chart generation for PDF reports (module) |555| `pdf_template.py` | Professional A4 PDF template with cover + TOC (module) |556557### Environment Note558559Scripts require outbound network access. `pagespeed.py` calls googleapis.com — if it fails, say "performance data unavailable" and use the manual checklist in `references/technical-checklist.md`.560561### Excel Export562563```bash564python scripts/generate_report.py https://example.com --format xlsx --output report.xlsx565python scripts/generate_report.py https://example.com --format all --output report566```567568Requires `openpyxl` (optional): `pip install openpyxl>=3.1.0`569570### PDF Export571572```bash573python scripts/generate_report.py https://example.com --format pdf --output report.pdf574```575576Requires **WeasyPrint** (optional): `pip install weasyprint` — see [WeasyPrint installation](https://doc.courtbouillon.org/weasyprint/stable/first_steps.html#installation) for OS libraries. **Fallback:** `--format html` then browser **Print → Save as PDF**.577578### Extensions (Optional)579580Extensions add external data sources. Core scripts work without them.581582| Extension | What It Adds | Install |583|-----------|-------------|---------|584| Firecrawl | JS-rendered crawling | `bash extensions/firecrawl/install-generic.sh` |585| DataForSEO | Live SERP, keywords, backlinks | `bash extensions/dataforseo/install-generic.sh` |586| Ahrefs | Backlink data, keyword rankings, content gap | MCP config |587| SE Ranking | AI Share-of-Voice, GEO visibility | MCP config |588| Profound | LLM citation tracking (ChatGPT, Perplexity, Claude) | MCP config |589| Bing Webmaster | Bing indexation + IndexNow submission | MCP config |590591See `references/optional-extensions-mcp.md` for install paths (plugin bundle); full monorepo: `extensions/README.md`.592593### Subagent Definitions594595For parallel audit execution, scopes and scripts are in **`agents/PARALLEL-AUDIT.md`** (single file). Each platform interprets these natively — Cursor uses its Task tool, Claude Code can use its Agent tool, others read as context. See `agents/README.md` for the orchestration pattern.596597### Context Management for Long Sessions598599If context fills mid-audit: compress completed findings into `[Section] Finding | Severity | Fix` one-liners, checkpoint the score, continue with remaining sections, merge back to full format at end.600601---602603## 22. SEO Drift Monitoring604605Track changes to SEO-critical page elements over time. `drift_monitor.py` captures baseline snapshots (title, meta, canonical, robots, H1, headings, schema, internal links, word count, Open Graph) and compares against current state using 17 rules across 3 severity levels:606607- **Critical** (6 rules): Status code to 4xx/5xx, canonical changed, robots to noindex, redirect on 200, title removed, all schema removed608- **Warning** (7 rules): Title/meta >50% different, H1 changed, headings structure, schema count, word count −20%, links ±30%609- **Info** (4 rules): Minor title/meta tweaks, links 10–30%, word count within 20%610611Use cases: pre/post deployment checks, ongoing monitoring, traffic drop investigation, migration validation.612613Scripts: `drift_monitor.py` (baseline, compare, history, report) → `references/procedures/22-drift-monitoring.md`614615---616617## 23. Semantic Topic Clustering618619SERP-overlap-based topic clustering for content strategy. Clusters keywords by shared top-10 SERP results (pages ranking for multiple keywords indicate topical overlap). Hub-and-spoke architecture: pillar pages + cluster posts. Generates internal link matrices.620621Requires SERP data input (DataForSEO extension or manual CSV with keyword,rank,url format).622623Script: `topic_cluster.py` → `references/procedures/23-semantic-clustering.md`624625---626627## 24. E-commerce SEO628629Specialized e-commerce audit procedures and schema validation. Covers Product + Offer schema, MerchantReturnPolicy (requires `returnPolicyCountry` since March 2025), OfferShippingDetails, category vs. product page differentiation, faceted navigation, out-of-stock handling, and EU compliance (Certification migration, IPTC AI image labeling).630631Script: `ecommerce_schema.py` → `references/procedures/24-ecommerce-seo.md`632633---634635## 25. Maps Intelligence & Advanced Local SEO636637Extends §12 with geo-grid rank tracking, GBP completeness audit, review intelligence (rating, count, recency, velocity, sentiment), competitor radius mapping, and NAP consistency checking across directories.638639Script: `maps_checker.py` → `references/procedures/25-maps-intelligence.md`640641---642643## Google API Tier System644645| Tier | Auth | APIs | Scripts |646|------|------|------|---------|647| 0 | API key (`PAGESPEED_API_KEY`) | PageSpeed Insights, CrUX, CrUX History | `pagespeed.py`, `crux_history.py` |648| 1 | OAuth2 | Google Search Console | `gsc_query.py` |649| 2 | OAuth2 | GA4 Data API | `ga4_report.py` |650651Run `google_api_tier.py` to detect available credentials and capabilities. Each tier adds data but lower tiers produce valid audits. See `references/optional-extensions-mcp.md` for extension data sources.652653---654655## Full Detail Reference656657This file provides enough context to route, audit, and execute. For the routing shell and global guardrails, read `SKILL.md`. For step-by-step procedures, load the matching file from `references/procedures/` (see `references/procedures/README.md`). Key procedures on demand:658659| Need | Read |660|---|---|661| Full audit process with examples | `references/procedures/02-full-site-audit.md` |662| GEO citation demonstration pattern | `references/procedures/03-geo-ai-search.md` |663| Technical audit full checklist | `references/procedures/04-technical-seo.md` |664| Schema validation checklist | `references/procedures/05-schema-structured-data.md` |665| Content pruning decision tree | `references/procedures/06-content-eeat-and-pruning.md` (§6b) |666| Canonical remediation tables | `references/procedures/11-crawl-indexation.md` |667| Competitor analysis dimensions | `references/procedures/08-competitor-analysis.md` |668| Migration pre/post checklists | `references/procedures/20-site-migration.md` |669| Execute + verify loop with examples | `references/procedures/02-full-site-audit.md` (Mode 3) |670| Drift monitoring rules + workflow | `references/procedures/22-drift-monitoring.md` |671| SERP-overlap topic clustering | `references/procedures/23-semantic-clustering.md` |672| E-commerce schema + faceted nav | `references/procedures/24-ecommerce-seo.md` |673| Geo-grid + GBP + review intelligence | `references/procedures/25-maps-intelligence.md` |674
One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| mykpono/ultimate-seo-geoGEMINI.md · 66 | GEMINI.md | setuplint-formatdependenciesagent-behaviour | 62/100 | 14 days ago | |
| mykpono/ultimate-seo-geoplugins/ultimate-seo-geo/skills/ultimate-seo-geo/AGENTS.md · 66 | AGENTS.md | setupbuildlint-formatstyle+4 | 73/100 | today | |
| mykpono/ultimate-seo-geoplugins/ultimate-seo-geo/skills/ultimate-seo-geo/GEMINI.md · 66 | GEMINI.md | setuplint-formatdependenciesagent-behaviour | 62/100 | 14 days ago | |
| mykpono/ultimate-seo-geo.github/copilot-instructions.md · 66 | Copilot instructions | setupdo-notagent-behaviour | 65/100 | 14 days ago |
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| vllm-project/vllmAGENTS.md · 89k | AGENTS.md | setuptestlint-formatstyle+5 | 100/100 | 14 days ago | |
| code-yeongyu/oh-my-openagentpackages/web/AGENTS.md · 68k | AGENTS.md | setupbuildtestlint-format+6 | 100/100 | 13 days ago | |
| deepseek-ai/deepseek-harnessnative/landlock-run/AGENTS.md · 104k | AGENTS.md | setupteststylearch+3 | 100/100 | today | |
| TryGhost/Ghoste2e/AGENTS.md · 55k | AGENTS.md | setupteststylearch+2 | 100/100 | today | |
| n8n-io/n8npackages/@n8n/agents/AGENTS.md · 201k | AGENTS.md | buildteststylearch+3 | 100/100 | 14 days ago | |
| duckduckgo/content-scope-scriptsspecial-pages/AGENTS.md · 70 | AGENTS.md | buildteststylearch+3 | 100/100 | 14 days ago | |
| aaif-goose/gooseAGENTS.md · 53k | AGENTS.md | setupbuildtestlint-format+7 | 100/100 | 8 days ago | |
| mui/material-uiAGENTS.md · 99k | AGENTS.md | setupbuildtestlint-format+9 | 100/100 | 14 days ago |
A badge carrying the measured quality of the strongest agent config file in this repository, out of 100. It reads from this index every time somebody loads your page, so it changes when the measurement changes and there is nothing to keep up to date. Free, no account, and the value is not something you or we can set by hand.
[](https://rulestack.kynth.studio/configs/mykpono-ultimate-seo-geo-agents)Would rather not hotlink us? Every badge is also served in shields.io’s endpoint schema, so shields renders the image and your readers never talk to our domain:
Published by Toolproof, the masthead over this index and eight others. The method behind the number is at toolproof.kynth.studio/methodology, and the whole thing is readable as JSON with no key at /api.