seo — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited seo (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
If the user runs /seo without a URL or command, ask:
What would you like to analyze?
1. Full audit — /seo audit [url]
2. Single page — /seo page [url]
3. LLM readiness — /seo llm [url]
4. Schema fix — /seo schema [url]
5. Content/E-E-A-T — /seo content [url]
6. Action plan — /seo plan [url]
7. Brand AI check — /seo brand [brand-name] [url]
8. Search intent — /seo intent [url]
9. IndexNow check — /seo indexnow [url]
10. Content rewrite — /seo rewrite [url]
11. AI Overviews — /seo aio [keyword] [url]
Which command and URL?Never simulate, hallucinate, or estimate data you haven't fetched. If a fetch fails — say so. If you can't check something — say so.
/seo audit — full site audit (runs all checks)
/seo page — single page deep analysis
/seo content — E-E-A-T quality scoring
/seo schema — JSON-LD structured data
/seo images — alt text + format audit
/seo sitemap — XML sitemap generation
/seo hreflang — international SEO
/seo local — local business + GBP
/seo geo — AI Overviews / GEO
/seo llm — LLM / AI citation optimization
/seo plan — strategic SEO roadmap
/seo competitor — competitor gap analysis
/seo content-opt — on-page optimization
/seo programmatic — pages at scale
/seo brand — AI brand visibility tracking (NEW)
/seo intent — search intent classification (NEW)
/seo indexnow — IndexNow implementation check (NEW)
/seo rewrite — AutoGEO content rewrite suggestions (NEW)
/seo aio — AI Overviews presence check (NEW)When given a URL, run ALL of these in order. Never skip.
WebFetch: [url] → parse HTML: title, meta, H1-H6, canonical,
og tags, JSON-LD blocks, viewport, lang attr
WebFetch: [url]/robots.txt → crawl rules, AI crawler allowances
WebFetch: [url]/sitemap.xml → if 404, check robots.txt for Sitemap: line
WebFetch: [url]/llms.txt → LLM accessibility file (note if missing)Parse raw HTML directly. Extract all <script type="application/ld+json"> blocks. Check for client-side rendering: if HTML body has minimal content + heavy JS = CSR warning (AI crawlers cannot execute JavaScript — CSR content is invisible to them).
WebFetch: https://www.googleapis.com/pagespeedonline/v5/runPagespeed
?url=[url_encoded]&strategy=mobile
WebFetch: https://www.googleapis.com/pagespeedonline/v5/runPagespeed
?url=[url_encoded]&strategy=desktopExtract from JSON:
lighthouseResult.audits.largest-contentful-paint.displayValue → LCP
lighthouseResult.audits.interaction-to-next-paint.displayValue → INP
lighthouseResult.audits.total-blocking-time.displayValue → TBT
lighthouseResult.audits.cumulative-layout-shift.displayValue → CLS
lighthouseResult.categories.performance.score × 100 → Perf score
lighthouseResult.categories.seo.score × 100 → Lighthouse SEOIf API returns error or rate limit: state "CWV: fetch failed — check manually at pagespeed.web.dev" and mark CWV score as N/A (do not guess).
Bash: curl -sI "[url]" 2>/dev/null | head -40Check: HTTPS redirect (301 from http://), Strict-Transport-Security, X-Frame-Options, X-Content-Type-Options, Content-Security-Policy, server/framework leakage in Server: header.
WebSearch: site:[domain]Note approximate indexed page count from snippet text. Do NOT treat this number as exact — it is Google's estimate only.
Always include this block in the report:
-- DATA LIMITATIONS ──────────────────────────────────────────
Backlinks requires Ahrefs / Semrush / Moz
Full site crawl requires Screaming Frog / Sitebulb
GSC impressions/CTR requires Google Search Console access
Real INP field data requires Chrome UX Report (CrUX)
Holistic CWV score requires GSC Core Web Vitals report
AI citation tracking requires Brandwatch / Mention / manual
──────────────────────────────────────────────────────────────Technical SEO 20 pts (crawlability, HTTPS, architecture, CWV)
Content / E-E-A-T 20 pts (depth, authorship, citations, freshness)
On-Page SEO 17 pts (title, meta, headings, URL, internal links)
LLM Readiness 18 pts (llms.txt, crawlers, structure, entity clarity)
Schema Markup 9 pts (JSON-LD types, validity, rich snippet eligibility)
Core Web Vitals 10 pts (LCP, INP, CLS — real PSI data only)
Images 6 pts (alt text, WebP/AVIF, lazy loading, sizing)Priority: CRITICAL > HIGH > MEDIUM > LOW
cannot execute JavaScript
Strict-Transport-Security: max-age=31536000X-Content-Type-Options: nosniffX-Frame-Options: DENY or SAMEORIGINLCP < 2.5s good | 2.5-4.0s needs improvement | > 4.0s poor
INP < 200ms good | 200-500ms needs improvement | > 500ms poor
CLS < 0.1 good | 0.1-0.25 needs improvement | > 0.25 poorNote: Google March 2026 Core Update introduced holistic CWV scoring — performance is now evaluated across the entire domain, not per-URL. 43% of sites fail the INP threshold (most common failure in 2026).
dateModified in Article schema (not just datePublished)ChatGPT 55-60% of AI referral traffic
Perplexity 18-22% (but 11x conversion vs organic)
Gemini ~8.7%
Others ~13%Community standard (llmstxt.org), NOT yet IETF/W3C official. Adopted by 600+ sites including Stripe, Cloudflare, Anthropic, Vercel. Reduces AI hallucinations about your site by 30-70%.
Required format:
# [Site Name]
> [One sentence describing what the site is and who it's for]
## Docs
- [Page Title](https://example.com/page): [one sentence description]
- [Page Title](https://example.com/page): [one sentence description]
## API Reference
- [Endpoint](https://example.com/api/v1): [description]
## Optional: pages not for LLMs
- /admin
- /checkout
- /user/settingsScore:
Complete list of AI crawlers to ALLOW (as of 2026):
# OpenAI
User-agent: GPTBot # training data
User-agent: OAI-SearchBot # ChatGPT search
User-agent: ChatGPT-User # ChatGPT browsing (user-triggered)
# Anthropic
User-agent: ClaudeBot # primary crawler
User-agent: Claude-SearchBot # Claude search
User-agent: Claude-User # user-triggered
# Perplexity
User-agent: PerplexityBot # primary crawler
# Note: Perplexity-User IGNORES robots.txt — user-triggered requests
# cannot be blocked via robots.txt. This is a known limitation.
# Google
User-agent: Google-Extended # Gemini / AI Overviews training
User-agent: Google-CloudVertexBot # Vertex AI
# Others
User-agent: Applebot-Extended # Apple AI
User-agent: DeepSeekBot # DeepSeek
User-agent: DuckAssistBot # DuckDuckGo AI
User-agent: Gemini-Deep-Research
User-agent: CCBot # Common Crawl (used by many LLMs)
User-agent: YouBot # You.comIMPORTANT: Blocking these = invisible to that AI platform. IMPORTANT: Perplexity-User ignores robots.txt by design (user-triggered). Check each explicitly in robots.txt. Blanket Allow: / is NOT enough.
Score:
Score:
(target 2-4 speakable sections per page)
<abbr>)JSON-LD only (never microdata or RDFa).
Required types by content:
All pages: Organization, BreadcrumbList, WebSite (with SearchAction)
Articles: Article (with author Person, datePublished, dateModified)
Products: Product (with offers Offer, aggregateRating AggregateRating)
FAQ content: FAQPage
How-to: HowTo
Local biz: LocalBusiness
Authors: Person (with sameAs, jobTitle, affiliation)Validate at:
Rich snippet eligibility check: FAQ, HowTo, Product, Review, Event, Recipe
Track how AI search engines currently describe your brand. Uses WebSearch to simulate what users see when they ask AI assistants about the brand.
Run these WebSearch queries (replace [brand] with actual brand name):
WebSearch: "[brand]" site:perplexity.ai OR inurl:perplexity
WebSearch: what is [brand] [industry]
WebSearch: [brand] review [year]
WebSearch: [brand] vs competitors
WebSearch: [brand] [core product/service]Also check:
WebFetch: [url]/llms.txt → brand description accuracy
WebSearch: site:[domain] → index coverage╔══════════════════════════════════════════════════════════════╗
║ BRAND AI VISIBILITY | [brand] | [date] ║
╠══════════════════════════════════════════════════════════════╣
║ AI Visibility Score: [XX]/100 ║
╚══════════════════════════════════════════════════════════════╝
Query Result Presence
─────────────────────────────────────────────────────────────
"what is [brand]" [found/not found] [score]
"[brand] vs competitors" [found/not found] [score]
"[brand] [core product]" [found/not found] [score]
─────────────────────────────────────────────────────────────
Brand description found:
"[exact text AI currently shows about the brand]"
Issues detected:
[!] [specific inaccuracy or gap found]
Fix recommendations:
- Add Organization sameAs to Wikidata entry
- Update llms.txt with accurate brand description
- Create/update About page with clear entity signals
- Add FAQ schema answering "What is [brand]?"Scoring (0-100):
For every page analyzed, classify its search intent and check alignment.
Navigational — user wants a specific site/page (brand queries)
Informational — user wants to learn (how, what, why, guide, tutorial)
Commercial — user is researching before buying (best, top, review, compare)
Transactional — user wants to act now (buy, get, download, sign up, price)Flag when:
Page: [url]
Detected intent: [Navigational / Informational / Commercial / Transactional]
Confidence: [High / Medium / Low]
Content alignment: [Aligned / MISMATCH]
Intent signals found:
+ [signal 1]
+ [signal 2]
- [mismatch signal if any]
Fix: [specific change to align content with intent]IndexNow lets sites instantly notify Bing, Yandex, Naver, and Seznam when content changes. Google does NOT support IndexNow (uses its own crawl system).
WebFetch: [url]/[any-key].txtLook for a plain-text file containing just the API key (alphanumeric, 8-128 chars). Also check: WebFetch: [url]/indexnow.txt
# robots.txt may contain:
# IndexNow: [key]<meta name="indexnow-verification" content="[key]">Check if site documentation mentions IndexNow integration.
Bing → indexnow.org endpoint
Yandex → yandex.com/indexnow
Naver → searchadvisor.naver.com
Seznam → seznam.cz
DuckDuckGo → via Bing partnership IndexNow Status:
─────────────────────────────────────────────────
Key file found: [YES: /abc123.txt / NO]
robots.txt hint: [YES / NO]
Meta tag: [YES / NO]
─────────────────────────────────────────────────
Status: [IMPLEMENTED / NOT IMPLEMENTED]
If NOT IMPLEMENTED — fix:
1. Generate a key: openssl rand -hex 32
2. Create /[key].txt containing just the key
3. Add to robots.txt: IndexNow: [key]
4. On content publish: POST to https://api.indexnow.org/indexnow
Body: {"host":"[domain]","key":"[key]","urlList":["[updated-url]"]}
5. Bing propagates to DuckDuckGo automaticallyBased on AutoGEO (ICLR 2026) — automatically generate AI-optimized rewrites of the most citation-critical sections of a page.
Show original → rewritten side by side:
SECTION: [H2 heading]
─────────────────────────────────────────────────────────
ORIGINAL:
"[exact original text, first 2-3 sentences]"
REWRITTEN (AutoGEO):
"[rewritten version: definition-first, active voice, data added,
question-phrased heading, ≤ 20 word sentences]"
Changes made:
+ Added definition in sentence 1
+ Moved key stat to opening
+ Converted heading to question format
+ Shortened avg sentence: 31 → 18 words
─────────────────────────────────────────────────────────**bold**Write a file with all rewrite suggestions in diff-friendly format.
Google AI Overviews (formerly SGE) appear for ~20% of queries in 2026. Check whether your content is being cited or excluded.
WebSearch: [keyword] — note if result snippet looks like an AI Overview summary
WebSearch: what is [topic from page]
WebSearch: how to [action from page]
WebSearch: best [product/service from page]
WebSearch: [brand] [core topic] Query: [keyword]
─────────────────────────────────────────────────────────
SERP type: [Informational / Commercial / Mixed]
AIO likely: [YES / NO / UNKNOWN]
Your domain in top 3: [YES / NO]
Featured snippet: [YES — yours / YES — competitor / NO]
AIO citation risk: [Likely cited / Unlikely / Blocked by CSR]
─────────────────────────────────────────────────────────╔══════════════════════════════════════════════════════════════╗
║ AI OVERVIEWS CHECK | [domain] | [date] ║
╠══════════════════════════════════════════════════════════════╣
║ AIO Readiness Score: [XX]/100 ║
╚══════════════════════════════════════════════════════════════╝
Keyword SERP Type Top-3? AIO Eligible?
─────────────────────────────────────────────────────────
[keyword 1] Info YES LIKELY
[keyword 2] Commercial NO UNLIKELY
[keyword 3] Mixed NO POSSIBLE
─────────────────────────────────────────────────────────
Blockers found:
[!] CSR detected — AI cannot index content
[!] No FAQ schema — missing AIO signal
[~] Content age > 2 years on [page] — refresh needed
Quick wins:
- Add FAQPage schema to [url]
- Add speakable markup to answer sections
- Refresh publication date + add dateModified to schema╔══════════════════════════════════════════════════════════════╗
║ SEO ANALYZER v4.0 | [domain] ║
╚══════════════════════════════════════════════════════════════╝
Fetching data — no simulation, real results only
[1/7] HTML + meta + schema ......................... [status]
[2/7] robots.txt + sitemap.xml ..................... [status]
[3/7] llms.txt ..................................... [status]
[4/7] PageSpeed Insights (mobile + desktop) ........ [status]
[5/7] HTTP headers (curl -sI) ...................... [status]
[6/7] Search index (site:[domain]) ................. [status]
[7/7] IndexNow key file ............................ [status]
[status] = "done" | "FAILED: [reason]" | "404 not found"Show each line as it completes. Show real values, not placeholders.
╔══════════════════════════════════════════════════════════════╗
║ SEO HEALTH REPORT | [domain] | [YYYY-MM-DD] ║
╠══════════════════════════════════════════════════════════════╣
║ SCORE: [XX]/100 [progress_bar] Grade: [letter] ║
╚══════════════════════════════════════════════════════════════╝
Category Points Bar Weight
────────────────────────────────────────────────────
Technical SEO [x]/20 [██████████] 20%
Content / E-E-A-T [x]/20 [██████████] 20%
LLM Readiness [x]/18 [██████████] 18% <- AI era
On-Page SEO [x]/17 [██████████] 17%
Core Web Vitals [x]/10 [██████████] 10%
Schema Markup [x]/ 9 [██████████] 9%
Images [x]/ 6 [██████████] 6%
────────────────────────────────────────────────────
TOTAL [x]/100 [██████████]
Core Web Vitals (real PSI data):
LCP [mobile]: [value] [GOOD/NEEDS WORK/POOR]
INP [mobile]: [value] [GOOD/NEEDS WORK/POOR]
CLS [mobile]: [value] [GOOD/NEEDS WORK/POOR]
Performance: [score]% mobile | [score]% desktop
╔══════════════════════════════════════════════════════════════╗
║ CRITICAL [N] HIGH [N] MEDIUM [N] LOW [N] ║
╚══════════════════════════════════════════════════════════════╝
-- CRITICAL ─────────────────────────────────────────────────
[!] [exact issue found from real data — never invented]
-- HIGH ──────────────────────────────────────────────────────
[#] [exact issue found from real data]
-- MEDIUM ────────────────────────────────────────────────────
[~] [exact issue found from real data]
-- LOW ───────────────────────────────────────────────────────
[-] [exact issue found from real data]
-- DATA LIMITATIONS ──────────────────────────────────────────
Backlinks requires Ahrefs / Semrush / Moz
Full site crawl requires Screaming Frog / Sitebulb
GSC data requires Google Search Console access
Real INP field data requires Chrome UX Report (CrUX)
Holistic CWV score requires GSC Core Web Vitals report
──────────────────────────────────────────────────────────────
╔══════════════════════════════════════════════════════════════╗
║ GENERATED FILES ║
╠══════════════════════════════════════════════════════════════╣
║ sitemap.xml — built from crawled URLs ║
║ robots.txt — all AI crawlers allowed ║
║ llms.txt — site map for LLMs ║
║ schema.json — JSON-LD ready to paste ║
║ seo-action-plan.md — prioritized fixes with effort tags ║
║ rewrite-suggestions.md — AutoGEO content rewrites ║
╚══════════════════════════════════════════════════════════════╝█ = filled, ░ = empty, always 10 chars. [████████░░] = 80% | [████░░░░░░] = 40% | [██████████] = 100%
90-100 A+ AI-citation-ready, excellent
80-89 A Strong, minor gaps
70-79 B+ Good, LLM gaps need fixing
60-69 B Fair, structural work needed
50-59 C Weak, significant problems
< 50 D Critical, rebuild fundamentalsAfter every full audit, write these files using the Write tool:
sitemap.xml
robots.txt
llms.txt
schema.json
seo-action-plan.md
# SEO Action Plan — [domain] — [date]
## CRITICAL (fix today)
- [ ] [issue]: [exact fix] — effort: [low/medium/high]
## HIGH (fix this week)
- [ ] [issue]: [exact fix] — effort: [low/medium/high]
## MEDIUM (fix this month)
- [ ] [issue]: [exact fix] — effort: [low/medium/high]
## LOW (backlog)
- [ ] [issue]: [exact fix] — effort: [low/medium/high]rewrite-suggestions.md (generated by /seo rewrite or included in full audit)
# AutoGEO Rewrite Suggestions — [domain] — [date]
## [Page URL]
### [Section heading]
**ORIGINAL:** [original text]
**REWRITTEN:** [AutoGEO-optimized version]
**Changes:** [list of applied rules]~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.