robots_checker.py <domain> | robots.txt: structure, sitemap refs, per-bot Allow/Disallow for 20 crawlers (GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-User, PerplexityBot, Google-Extended, meta-externalagent, Bytespider, etc.) | Recommends 301 vs 302 for upgrades |
sitemap_validator.py <url> | XML validity, sitemap-index recursion, URL count vs 50k limit, HTTPS-only, lastmod sanity, deprecated <priority>/<changefreq>, sample HTTP-200 check, robots.txt cross-reference | --sample N configurable |
redirect_chain_checker.py <url> | per-hop redirect trace, HTTP→HTTPS upgrade, 301 vs 302 mix, loop detection, canonical alignment on final URL | Hop count ≥ 3 flagged |
security_headers_checker.py <url> | HSTS (max-age, includeSubDomains, preload), CSP (unsafe-inline / nonce / hash), X-Frame-Options or CSP frame-ancestors, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, mixed-content scan | Page Experience signals |
broken_links_checker.py <url> | Per-page link audit: every <a>, <link>, <script>, <img>, <source>, <iframe>, CSS background. Concurrent HEAD with GET fallback. Splits 4xx vs 5xx vs auth-gated 401/403 (separate bucket — soft signal) | --max-links, --internal-only |
images_audit.py <url> | Alt-text coverage, format mix (WebP/AVIF/JPEG/PNG/SVG) with next-gen target ≥70%, width/height dims for CLS, lazy-loading on below-fold, size flags ≥200KB/≥500KB | --no-size-probe for fast mode |
hreflang_checker.py <url> | BCP-47 codes, x-default, self-reference, reciprocity (parallel) | --check-reciprocity |
schema_recommended_fields.py <url> | Per-schema-item required vs recommended field coverage; per-item completeness 0-100 | Article: per Google "no required fields" |
llms_txt_checker.py <domain> | llms.txt existence, structure, link-validity (HEAD probe of referenced URLs), AEO-language heuristics | --skip-links for fast mode |
internal_link_graph.py <seed> | Crawl-built adjacency: true orphans (sitemap not linked), sitemap gaps, depth-4+ pages, hub pages, dead-ends | --max-pages, --max-depth |
psi_checker.py <url> | PageSpeed Insights API v5: field CrUX (LCP/INP/CLS/FCP/TTFB at 75th percentile) + lab Lighthouse | API key from env GOOGLE_PSI_API_KEY or Keychain google-psi-api-key |
aeo_gemini.py <domain> "<query>" … | Gemini-with-Google-Search-grounding probe: does the LLM cite the target domain when answering each query? Proxy for Google AI Overviews / AI Mode | Needs google-gemini-api-key |
cms_detector.py <url> | Identifies platform from body / headers / generator meta (WordPress, Shopify, Webflow, Wix, Squarespace, Ghost, Drupal, Magento, HubSpot, BigCommerce, Next.js, Nuxt, Gatsby, Hugo, Astro, etc.) + tailored SEO tips for that platform. | 24+ platforms covered |
js_rendering_diff.py <url> | Server-rendered HTML vs Playwright-rendered HTML structural diff: canonical/robots/title/meta/schema/word-count/hreflang. P0 flags when canonical or schema only in rendered (AI crawlers + Googlebot indexing delay) | Requires Playwright Chromium |
log_analyzer.py <log_file> | Parses Apache/Nginx access logs (incl .gz): per-bot breakdown (Googlebot, GPTBot, ClaudeBot, PerplexityBot, etc.), crawl-waste detection (UTM, fbclid, feeds, parameter explosions), 4xx/5xx spike days, sitemap cross-check (orphans + cold pages). | --sitemap, --days N |
content_quality.py <url> | Word count vs page-type baseline, Flesch reading ease, avg sentence/paragraph length, keyword density (stuffing detection at >5%), AI-generation marker phrases, 134-200 word citable-passage extraction, author byline + dates (E-E-A-T). | --page-type blog|service|home |
local_seo_checker.py <url> | NAP discoverability (Name + Address + Phone), LocalBusiness schema required+recommended fields, Google Maps embed, GBP / Yelp / BBB / Facebook citations, NAP consistency (schema vs visible page text). | Use for local-intent pages |
ai_visibility_score.py <url> | Composite 0-100 AI Visibility Score across 6 components (AI crawler accessibility, SSR completeness, Schema, llms.txt, hreflang, live Gemini citation rate). Verdict + per-component breakdown. | Optional live Gemini probe with --queries |
audit_history.py {store|list|diff|trend|prune} | SQLite-backed audit history. Stores page_score JSON, computes score trends over time, diffs two runs (findings added vs removed), prunes old runs. | DB at ~/.amazing-seo-skill/history.db |
serpapi_integration.py "<query>" | Optional SERP layer via SerpAPI: top-10 organic, SERP features (AI Overview, Featured Snippet, PAA, Knowledge Panel, Local Pack), target-domain position, AI Overview citation check, People Also Ask. | Needs SERPAPI_KEY or Keychain serpapi-key |
render_html_report.py < page_score.json | Renders a page_score.py --format json into a self-contained styled HTML report. Dark theme, severity-coloured findings, category cards, score gauge. | Pipe page_score JSON in |
page_score.py <url> | Single-page orchestrator: runs every applicable L1 checker on one URL in parallel, aggregates into 0-100 Health Score with category breakdown + prioritized findings. JSON or Markdown output. | --format markdown|json, --no-psi |
parse_html.py <file> | Extract title/meta/headings/canonical/hreflang/images/links/schema/word-count from saved HTML | Used internally by page_score.py |
fetch_page.py <url> | Standalone fetcher with SSRF guard; saves HTML to disk for offline analysis | Pre-stage for parse_html.py |