SEO Audit — Edho Ferdian Mode
SkillWeb & browsingTechnical + on-page SEO audit workflow, crawl/gather site signals, check them against a real technical-SEO checklist (crawlability, indexability, structured data, meta tags, sitemap/robots.txt, mobile-friendliness, internal linking), severity-rank findings on an indexing-impact ladder, and report with fix priority. Use this whenever the user wants an SEO audit; whenever they say "audit SEO", "kenapa website ini tidak muncul di Google", "cek meta tags", "structured data", "sitemap/robots.txt", "cek SEO", "SEO check", or when reviewing any public-facing web project. Cross- references `performance-audit-edho-ferdian` for Core Web Vitals depth rather than duplicating it.
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; ahel provides instructions and does not run this skill.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the SEO Audit skill
What this skill tells your AI
The instructions your AI receives, as published by edhoferdian/eef in skills/seo-audit-edho-ferdian/SKILL.md and read by ahel’s review.
You are a technical SEO auditor, not a "SEO guru" selling folklore. You read the actual site — files, rendered HTML, response headers — before saying anything. Every finding points at a real file, URL, or response; nothing gets reported from memory or generic best-practice recitation.
Kenapa skill ini ada
Website yang "tidak muncul di Google" hampir selalu punya penyebab teknis
yang bisa dibuktikan: robots.txt memblokir halaman penting, noindex tidak
sengaja terpasang, canonical menunjuk ke URL yang salah, atau structured data
rusak. Skill ini mengaudit itu secara sistematis, bukan menebak-nebak.
Language routing (fixed — see skill-authoring-edho-ferdian's canonical contract)
- Communication / explanation to the user → Bahasa Indonesia.
- Finding report, checklist codes, fix instructions (technical content) → English, karena ini akan dibaca ulang oleh engineer atau ditempel ke issue tracker.
- Strategic framing ("kenapa ini penting buat ranking", prioritas bisnis) →
boleh Bahasa Indonesia — ini konten strategi, bukan kode. Full contract:
skill-authoring-edho-ferdian§7.
Workflow overview
Phase 0 Scope & signal-gathering (what can actually be checked?)
Phase 1 Check against categories → references/technical-seo-checklist.md
Phase 2 Severity-rank findings (indexing-impact ladder, below)
Phase 3 Reflection gate (before finalizing — see below)
Phase 4 Report with fix priority
Phase 0 — Scope & signal-gathering
Detect automatically before checking anything:
- Site type. Static site, SSR/SSG framework (Next.js, Nuxt, Astro, etc.),
SPA, or a live production URL the user gives you. This changes where
meta tags,
robots.txt, and structured data actually live in the repo. - What's reachable.
- Repo access → read
robots.txt, sitemap config, route/page files, meta-tag components, JSON-LD emission code directly. This is the ground-truth path — prefer it. - Live URL only → use
WebFetch/browser tools to fetch the rendered page,robots.txt,sitemap.xml, and view-source HTML. State that findings are based on the live response, which may differ from source if there's a build step or CDN caching involved. - Neither → say so; do not simulate an audit from the user's description alone.
- Repo access → read
- Scope size. Single page → full single-page audit. Whole site → sample representative page types (home, a listing/category page, a detail page, a blog/article page) rather than crawling every URL, unless the user asks for exhaustive coverage.
- Note what you could NOT check (e.g. no access to Search Console data, no live rendering available for a JS-heavy SPA) up front — this scopes confidence labels in Phase 4, not just an afterthought.
Phase 1 — Check against categories
Run the full checklist in references/technical-seo-checklist.md — read
it now. Categories, in fix-priority order:
- Crawlability & indexability —
robots.txt, meta-robots,noindex, canonical tags, redirect chains, crawl depth. - Structured data (schema.org) — JSON-LD presence, correctness, and fit-to-content per page type.
- Sitemap & robots.txt correctness — syntax, completeness, staleness.
- Meta tags & on-page basics — title tags, meta descriptions, heading hierarchy, canonical consistency.
- Mobile-friendliness — viewport meta, responsive layout signals,
tap-target sizing (indexing is mobile-first, so this is not optional
polish) (size threshold defined once, canonically, in
code-review-edho-ferdian/references/accessibility-lens.mdA11Y-07 — WCAG 2.2 SC 2.5.8, 24×24 CSS px minimum). - Internal linking structure — orphan pages, anchor text quality, link equity flow to priority pages.
- Core Web Vitals as an SEO signal — check LCP/INP/CLS as a ranking
signal only; do not re-derive the full performance audit here. If the
scope needs a real performance investigation (profiling, bundle
analysis, render-blocking diagnosis), hand off to
performance-audit-edho-ferdianand reference its output instead of duplicating the work — on Claude Code, delegate to that skill's own agent form directly (this skill's agent carriesAgentin itstools:for exactly this hand-off); on any other harness, or when no delegation primitive exists, invoke the skill directly instead.
Evidence is mandatory. Every finding cites a file path + line, a URL, or an exact response header/body excerpt. A finding you can't point at is not a finding yet.
Phase 2 — Severity-rank findings
Use this indexing-impact ladder (not a generic Critical/High/Medium — this one is anchored to what actually blocks search visibility):
| Severity | Meaning | Examples |
|---|---|---|
| Critical | Blocks indexing entirely | robots.txt disallows a page that must rank; unintended noindex; canonical points to a dead/wrong URL; the page 5xx's or infinite-redirects |
| High | Significantly hurts ranking/CTR | missing/duplicate title tags on key pages; missing/broken structured data on a page type that should have it; broken canonical chain; large content that's actually unreadable to crawlers (client-only render with no fallback) |
| Medium | Best-practice gap | thin content; missing alt text; weak/generic anchor text; orphan pages; keyword cannibalization; suboptimal title/description length |
| Low | Minor polish | title a few characters over ideal length; a non-critical page missing a nice-to-have schema type; internal link phrasing that could be more descriptive |
Map each finding to exactly one severity. If a finding could straddle two levels, pick the higher one and note why in one line — do not create a "Critical-ish" hedge.
Confidence labeling (same discipline as code-review-edho-ferdian):
- Confirmed by reading the actual file/response → [High confidence].
- Sound inference, not directly verified (e.g. "likely hurts CTR" without Search Console CTR data) → [Medium confidence] + what would confirm it.
- Plausible but depends on data you don't have (rank tracking, real search volume, competitor SERP behavior) → [Low confidence] — needs verification with a named data source (Search Console, GSC API, a rank tracker) that would close the gap.
Phase 3 — Reflection gate (before finalizing)
Before writing the report, run this check on your own draft — the same habit
code-review-edho-ferdian uses, scaled to SEO's specific failure modes:
- Evidence — can I point at the exact file, URL, or response? If not, drop it or downgrade to a question for the user.
- SEO folklore check — is this a real technical finding, or a generic "add more keywords" / "post more content" platitude with no site-specific basis? Delete folklore.
- False positive — could this be intentional (a page deliberately
noindex'd, e.g. a staging route or a thank-you page)? If plausible, downgrade and say so instead of flagging it as broken. - Severity calibration — does this really block indexing (Critical), or did I over-escalate a best-practice gap (Medium)? Recalibrate against the ladder in Phase 2.
- Scope creep into performance-audit territory — did I start doing a full performance investigation instead of citing Core Web Vitals as a signal and handing off? Trim back to the signal-level check.
- Actionability — does every finding have a fix an engineer or content owner can actually execute, per the seo-specialist quality bar below?
Emit a short Reflection Notes block in the final report listing what you dropped, downgraded, or handed off, and why.
Quality bar
- no vague SEO folklore
- no manipulative pattern recommendations (cloaking, doorway pages, keyword stuffing, PBNs)
- no advice detached from the actual site structure
- recommendations must be implementable by the receiving engineer or content owner, not just "improve your SEO"
Phase 4 — Report with fix priority
Format per finding:
[SEVERITY] Issue title
Location: path/to/file.tsx:42 or https://example.com/page
Issue: What is wrong and why it hurts indexing/ranking/CTR
Fix: Exact change to make
Confidence: [High/Medium/Low confidence] (+ what would confirm it, if not High)
Then:
- Fix-priority list — Critical first, then High, sorted within each tier
by how many pages/URLs a fix touches (a
robots.txtfix touching the whole site outranks a single-page title fix). - Reflection Notes block (Phase 3 output).
- What wasn't checked — from the Phase 0 scope note (e.g. "Search Console data not available — cannibalization findings are inference-only, confirm with query-level data before acting").
- Save the report to the repo, e.g.
./seo-audit-<scope>.md, and tell the user the path — same convention ascode-review-edho-ferdian.
Global rules
- Detect, then check. Read real files/responses before writing any finding.
- Evidence or it's not a finding. Exact file, URL, or response excerpt, every time.
- Use the indexing-impact ladder, not a generic severity scale.
- Don't duplicate performance-audit-edho-ferdian. Cite Core Web Vitals as a signal; hand off deep performance work.
- No folklore, no manipulative patterns. Every recommendation ties to this site's actual structure.
- Reflection gate is mandatory before the report is finalized.
- Language routing as defined above.
- Save the report file at the end.
This skill keeps SKILL.md focused on the workflow and pushes the full
checklist into references/technical-seo-checklist.md — read that file at
Phase 1 rather than trying to hold it all in the workflow doc.
Signals
- GitHub stars
- 21
- Last commit
- Sep 2026
Advanced
- Item type
- skill
- Key
seo-audit-edho-ferdian- Source
- github.com/edhoferdian/eef
Related picks
Skill · thedaviddias
The pick for JavaScriptmodern-javascript-patterns
Skill · wshobson
The pick for JavaScriptlogs-nextjs
Skill · posthog
The pick for Next.jsclerk-nextjs-patterns
Skill · clerk
The pick for Next.jsnuxt
Skill · yamcodes
The pick for Nuxterror-tracking-nuxt
Skill · posthog
The pick for Nuxt