qualia-framework 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -0
- package/bin/cli.js +519 -0
- package/framework/agents/architecture-strategist.md +53 -0
- package/framework/agents/backend-agent.md +150 -0
- package/framework/agents/code-simplicity-reviewer.md +86 -0
- package/framework/agents/frontend-agent.md +111 -0
- package/framework/agents/kieran-typescript-reviewer.md +96 -0
- package/framework/agents/performance-oracle.md +111 -0
- package/framework/agents/qualia-codebase-mapper.md +760 -0
- package/framework/agents/qualia-debugger.md +1203 -0
- package/framework/agents/qualia-executor.md +881 -0
- package/framework/agents/qualia-integration-checker.md +423 -0
- package/framework/agents/qualia-phase-researcher.md +453 -0
- package/framework/agents/qualia-plan-checker.md +699 -0
- package/framework/agents/qualia-planner.md +1241 -0
- package/framework/agents/qualia-project-researcher.md +602 -0
- package/framework/agents/qualia-research-synthesizer.md +236 -0
- package/framework/agents/qualia-roadmapper.md +605 -0
- package/framework/agents/qualia-verifier.md +685 -0
- package/framework/agents/team-orchestrator.md +228 -0
- package/framework/agents/teams/full-stack-team.md +48 -0
- package/framework/agents/teams/optimize-team.md +53 -0
- package/framework/agents/teams/review-team.md +62 -0
- package/framework/agents/teams/ship-team.md +86 -0
- package/framework/agents/test-agent.md +182 -0
- package/framework/askpass.sh +2 -0
- package/framework/commands/design.md +53 -0
- package/framework/commands/quick-db.md +22 -0
- package/framework/config/retention.json +35 -0
- package/framework/core/PRINCIPLES.md +77 -0
- package/framework/hooks/auto-format.sh +45 -0
- package/framework/hooks/block-env-edit.sh +42 -0
- package/framework/hooks/branch-guard.sh +46 -0
- package/framework/hooks/confirm-delete.sh +56 -0
- package/framework/hooks/migration-validate.sh +68 -0
- package/framework/hooks/notification-speak.sh +15 -0
- package/framework/hooks/pre-commit.sh +80 -0
- package/framework/hooks/pre-compact.sh +55 -0
- package/framework/hooks/pre-deploy-gate.sh +151 -0
- package/framework/hooks/qualia-colors.sh +32 -0
- package/framework/hooks/retention-cleanup.sh +43 -0
- package/framework/hooks/save-session-state.sh +153 -0
- package/framework/hooks/session-context-loader.sh +28 -0
- package/framework/hooks/session-learn.sh +30 -0
- package/framework/knowledge/claudecode-bible.md +1384 -0
- package/framework/knowledge/client-prefs.md +22 -0
- package/framework/knowledge/common-fixes.md +25 -0
- package/framework/knowledge/deployment-map.md +35 -0
- package/framework/knowledge/email-signature.html +1 -0
- package/framework/knowledge/employees.md +8 -0
- package/framework/knowledge/learned-patterns.md +51 -0
- package/framework/knowledge/optimization-research-2026.md +137 -0
- package/framework/knowledge/qualia-context.md +67 -0
- package/framework/knowledge/supabase-patterns.md +50 -0
- package/framework/knowledge/voice-agent-patterns.md +46 -0
- package/framework/qualia-engine/VERSION +1 -0
- package/framework/qualia-engine/bin/qualia-tools.js +2160 -0
- package/framework/qualia-engine/bin/qualia-tools.test.js +1054 -0
- package/framework/qualia-engine/references/checkpoints.md +775 -0
- package/framework/qualia-engine/references/continuation-format.md +249 -0
- package/framework/qualia-engine/references/decimal-phase-calculation.md +65 -0
- package/framework/qualia-engine/references/design-quality.md +56 -0
- package/framework/qualia-engine/references/git-integration.md +254 -0
- package/framework/qualia-engine/references/git-planning-commit.md +50 -0
- package/framework/qualia-engine/references/model-profile-resolution.md +32 -0
- package/framework/qualia-engine/references/model-profiles.md +73 -0
- package/framework/qualia-engine/references/phase-argument-parsing.md +61 -0
- package/framework/qualia-engine/references/planning-config.md +195 -0
- package/framework/qualia-engine/references/questioning.md +141 -0
- package/framework/qualia-engine/references/tdd.md +263 -0
- package/framework/qualia-engine/references/ui-brand.md +160 -0
- package/framework/qualia-engine/references/verification-patterns.md +612 -0
- package/framework/qualia-engine/templates/DEBUG.md +159 -0
- package/framework/qualia-engine/templates/DESIGN.md +81 -0
- package/framework/qualia-engine/templates/UAT.md +247 -0
- package/framework/qualia-engine/templates/codebase/architecture.md +255 -0
- package/framework/qualia-engine/templates/codebase/concerns.md +310 -0
- package/framework/qualia-engine/templates/codebase/conventions.md +307 -0
- package/framework/qualia-engine/templates/codebase/integrations.md +280 -0
- package/framework/qualia-engine/templates/codebase/stack.md +186 -0
- package/framework/qualia-engine/templates/codebase/structure.md +285 -0
- package/framework/qualia-engine/templates/codebase/testing.md +480 -0
- package/framework/qualia-engine/templates/config.json +35 -0
- package/framework/qualia-engine/templates/context.md +283 -0
- package/framework/qualia-engine/templates/continue-here.md +78 -0
- package/framework/qualia-engine/templates/debug-subagent-prompt.md +91 -0
- package/framework/qualia-engine/templates/discovery.md +146 -0
- package/framework/qualia-engine/templates/milestone-archive.md +123 -0
- package/framework/qualia-engine/templates/milestone.md +115 -0
- package/framework/qualia-engine/templates/phase-prompt.md +567 -0
- package/framework/qualia-engine/templates/planner-subagent-prompt.md +117 -0
- package/framework/qualia-engine/templates/project.md +184 -0
- package/framework/qualia-engine/templates/projects/ai-agent.md +156 -0
- package/framework/qualia-engine/templates/projects/mobile-app.md +181 -0
- package/framework/qualia-engine/templates/projects/voice-agent.md +134 -0
- package/framework/qualia-engine/templates/projects/website.md +137 -0
- package/framework/qualia-engine/templates/requirements.md +231 -0
- package/framework/qualia-engine/templates/research-project/ARCHITECTURE.md +204 -0
- package/framework/qualia-engine/templates/research-project/FEATURES.md +147 -0
- package/framework/qualia-engine/templates/research-project/PITFALLS.md +200 -0
- package/framework/qualia-engine/templates/research-project/STACK.md +120 -0
- package/framework/qualia-engine/templates/research-project/SUMMARY.md +170 -0
- package/framework/qualia-engine/templates/research.md +552 -0
- package/framework/qualia-engine/templates/roadmap.md +202 -0
- package/framework/qualia-engine/templates/state.md +176 -0
- package/framework/qualia-engine/templates/summary-complex.md +59 -0
- package/framework/qualia-engine/templates/summary-minimal.md +41 -0
- package/framework/qualia-engine/templates/summary-standard.md +48 -0
- package/framework/qualia-engine/templates/summary.md +246 -0
- package/framework/qualia-engine/templates/user-setup.md +311 -0
- package/framework/qualia-engine/templates/verification-report.md +322 -0
- package/framework/qualia-engine/workflows/add-phase.md +179 -0
- package/framework/qualia-engine/workflows/add-todo.md +157 -0
- package/framework/qualia-engine/workflows/audit-milestone.md +241 -0
- package/framework/qualia-engine/workflows/check-todos.md +176 -0
- package/framework/qualia-engine/workflows/complete-milestone.md +858 -0
- package/framework/qualia-engine/workflows/diagnose-issues.md +219 -0
- package/framework/qualia-engine/workflows/discovery-phase.md +289 -0
- package/framework/qualia-engine/workflows/discuss-phase.md +534 -0
- package/framework/qualia-engine/workflows/execute-phase.md +559 -0
- package/framework/qualia-engine/workflows/execute-plan.md +438 -0
- package/framework/qualia-engine/workflows/help.md +470 -0
- package/framework/qualia-engine/workflows/insert-phase.md +220 -0
- package/framework/qualia-engine/workflows/list-phase-assumptions.md +178 -0
- package/framework/qualia-engine/workflows/map-codebase.md +327 -0
- package/framework/qualia-engine/workflows/new-milestone.md +363 -0
- package/framework/qualia-engine/workflows/new-project.md +1037 -0
- package/framework/qualia-engine/workflows/pause-work.md +122 -0
- package/framework/qualia-engine/workflows/plan-milestone-gaps.md +256 -0
- package/framework/qualia-engine/workflows/plan-phase.md +422 -0
- package/framework/qualia-engine/workflows/progress.md +354 -0
- package/framework/qualia-engine/workflows/quick.md +252 -0
- package/framework/qualia-engine/workflows/remove-phase.md +326 -0
- package/framework/qualia-engine/workflows/research-phase.md +74 -0
- package/framework/qualia-engine/workflows/resume-project.md +306 -0
- package/framework/qualia-engine/workflows/set-profile.md +80 -0
- package/framework/qualia-engine/workflows/settings.md +145 -0
- package/framework/qualia-engine/workflows/transition.md +556 -0
- package/framework/qualia-engine/workflows/update.md +197 -0
- package/framework/qualia-engine/workflows/verify-phase.md +195 -0
- package/framework/qualia-engine/workflows/verify-work.md +625 -0
- package/framework/rules/context7.md +11 -0
- package/framework/rules/deployment.md +29 -0
- package/framework/rules/frontend.md +33 -0
- package/framework/rules/security.md +12 -0
- package/framework/rules/speed.md +20 -0
- package/framework/scripts/__pycache__/say.cpython-314.pyc +0 -0
- package/framework/scripts/apply-retention.sh +120 -0
- package/framework/scripts/bootstrap-pop-os.sh +354 -0
- package/framework/scripts/claude-voice +13 -0
- package/framework/scripts/cleanup.sh +131 -0
- package/framework/scripts/cowork-mode.sh +141 -0
- package/framework/scripts/generate-project-claude-md.sh +153 -0
- package/framework/scripts/load-test-webhook.js +172 -0
- package/framework/scripts/say.py +236 -0
- package/framework/scripts/showcase-video-recorder/ffmpeg-builder.js +167 -0
- package/framework/scripts/showcase-video-recorder/playwright-helpers.js +216 -0
- package/framework/scripts/speak.py +55 -0
- package/framework/scripts/speak.sh +18 -0
- package/framework/scripts/status.sh +138 -0
- package/framework/scripts/sync-to-framework.sh +65 -0
- package/framework/scripts/voice-hotkey.py +227 -0
- package/framework/scripts/voice-input.sh +51 -0
- package/framework/skills/animate/SKILL.md +202 -0
- package/framework/skills/bolder/SKILL.md +144 -0
- package/framework/skills/browser-qa/SKILL.md +536 -0
- package/framework/skills/clarify/SKILL.md +179 -0
- package/framework/skills/colorize/SKILL.md +170 -0
- package/framework/skills/critique/SKILL.md +126 -0
- package/framework/skills/deep-research/SKILL.md +271 -0
- package/framework/skills/delight/SKILL.md +329 -0
- package/framework/skills/deploy/SKILL.md +261 -0
- package/framework/skills/deploy-verify/SKILL.md +377 -0
- package/framework/skills/deploy-verify/scripts/canary-check.sh +206 -0
- package/framework/skills/deploy-verify/scripts/check-console-errors.js +147 -0
- package/framework/skills/deploy-verify/scripts/check-cwv.js +139 -0
- package/framework/skills/deploy-verify/scripts/project-detect.sh +84 -0
- package/framework/skills/deploy-verify/scripts/verify.sh +548 -0
- package/framework/skills/design-quieter/SKILL.md +130 -0
- package/framework/skills/distill/SKILL.md +149 -0
- package/framework/skills/docs-lookup/SKILL.md +78 -0
- package/framework/skills/fcm-notifications/SKILL.md +125 -0
- package/framework/skills/financial-ledger/SKILL.md +1039 -0
- package/framework/skills/frontend-master/NOTICE.md +4 -0
- package/framework/skills/frontend-master/SKILL.md +127 -0
- package/framework/skills/frontend-master/reference/color-and-contrast.md +132 -0
- package/framework/skills/frontend-master/reference/interaction-design.md +123 -0
- package/framework/skills/frontend-master/reference/motion-design.md +99 -0
- package/framework/skills/frontend-master/reference/responsive-design.md +114 -0
- package/framework/skills/frontend-master/reference/spatial-design.md +100 -0
- package/framework/skills/frontend-master/reference/typography.md +131 -0
- package/framework/skills/frontend-master/reference/ux-writing.md +107 -0
- package/framework/skills/harden/SKILL.md +357 -0
- package/framework/skills/i18n-rtl/SKILL.md +752 -0
- package/framework/skills/learn/SKILL.md +71 -0
- package/framework/skills/memory/SKILL.md +50 -0
- package/framework/skills/mobile-expo/SKILL.md +864 -0
- package/framework/skills/mobile-expo/references/store-checklist.md +550 -0
- package/framework/skills/nestjs-backend/README.md +73 -0
- package/framework/skills/nestjs-backend/SKILL.md +446 -0
- package/framework/skills/nestjs-backend/references/templates.md +1173 -0
- package/framework/skills/normalize/SKILL.md +79 -0
- package/framework/skills/onboard/SKILL.md +242 -0
- package/framework/skills/polish/SKILL.md +209 -0
- package/framework/skills/pr/SKILL.md +66 -0
- package/framework/skills/qualia/SKILL.md +153 -0
- package/framework/skills/qualia-add-todo/SKILL.md +68 -0
- package/framework/skills/qualia-audit-milestone/SKILL.md +92 -0
- package/framework/skills/qualia-check-todos/SKILL.md +55 -0
- package/framework/skills/qualia-complete-milestone/SKILL.md +108 -0
- package/framework/skills/qualia-debug/SKILL.md +149 -0
- package/framework/skills/qualia-design/SKILL.md +203 -0
- package/framework/skills/qualia-discuss-phase/SKILL.md +72 -0
- package/framework/skills/qualia-execute-phase/SKILL.md +86 -0
- package/framework/skills/qualia-help/SKILL.md +67 -0
- package/framework/skills/qualia-idk/SKILL.md +352 -0
- package/framework/skills/qualia-list-phase-assumptions/SKILL.md +67 -0
- package/framework/skills/qualia-new-milestone/SKILL.md +72 -0
- package/framework/skills/qualia-new-project/SKILL.md +92 -0
- package/framework/skills/qualia-optimize/SKILL.md +417 -0
- package/framework/skills/qualia-pause-work/SKILL.md +96 -0
- package/framework/skills/qualia-plan-milestone-gaps/SKILL.md +57 -0
- package/framework/skills/qualia-plan-phase/SKILL.md +101 -0
- package/framework/skills/qualia-progress/SKILL.md +53 -0
- package/framework/skills/qualia-quick/SKILL.md +89 -0
- package/framework/skills/qualia-research-phase/SKILL.md +88 -0
- package/framework/skills/qualia-resume-work/SKILL.md +62 -0
- package/framework/skills/qualia-review/SKILL.md +263 -0
- package/framework/skills/qualia-start/SKILL.md +182 -0
- package/framework/skills/qualia-verify-work/SKILL.md +105 -0
- package/framework/skills/qualia-workflow/SKILL.md +130 -0
- package/framework/skills/rag/SKILL.md +750 -0
- package/framework/skills/responsive/SKILL.md +231 -0
- package/framework/skills/retro/SKILL.md +284 -0
- package/framework/skills/sakani-conventions/SKILL.md +136 -0
- package/framework/skills/sakani-conventions/evals/evals.json +23 -0
- package/framework/skills/sakani-conventions/references/entities.md +365 -0
- package/framework/skills/sakani-conventions/references/error-codes.md +95 -0
- package/framework/skills/seo-master/SKILL.md +490 -0
- package/framework/skills/seo-master/references/checklist.md +199 -0
- package/framework/skills/seo-master/references/structured-data.md +609 -0
- package/framework/skills/ship/SKILL.md +202 -0
- package/framework/skills/stack-researcher/SKILL.md +215 -0
- package/framework/skills/status/SKILL.md +154 -0
- package/framework/skills/status/scripts/health-check.sh +562 -0
- package/framework/skills/subscription-payments/SKILL.md +250 -0
- package/framework/skills/supabase/SKILL.md +973 -0
- package/framework/skills/supabase/references/templates.md +159 -0
- package/framework/skills/team/SKILL.md +67 -0
- package/framework/skills/test-runner/SKILL.md +202 -0
- package/framework/skills/voice-agent/SKILL.md +407 -0
- package/framework/skills/zoho-workflow/SKILL.md +51 -0
- package/framework/statusline-command.sh +117 -0
- package/package.json +24 -0
- package/profiles/fawzi.json +16 -0
- package/profiles/hasan.json +16 -0
- package/profiles/moayad.json +16 -0
- package/templates/CLAUDE-owner.md +52 -0
- package/templates/CLAUDE.md.hbs +58 -0
- package/templates/env.claude.template +12 -0
- package/templates/settings.json +141 -0
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: seo-master
|
|
3
|
+
description: >
|
|
4
|
+
Comprehensive SEO audit, optimization, and automated fixing for any web project — local codebases or live sites.
|
|
5
|
+
Covers technical SEO (Core Web Vitals, structured data, meta tags, robots.txt, sitemaps, canonical URLs, hreflang,
|
|
6
|
+
mobile-first indexing), on-page SEO (titles, descriptions, headings, keywords, internal linking, image alt text),
|
|
7
|
+
content SEO (keyword research, content gaps, topic clusters, E-E-A-T), local SEO (Google Business Profile, local schema,
|
|
8
|
+
NAP consistency), performance SEO (page speed, lazy loading, CDN, compression), crawlability (redirect chains, orphan
|
|
9
|
+
pages, crawl budget), off-page SEO (backlink analysis, social signals), and monitoring (Search Console, rank tracking,
|
|
10
|
+
competitor analysis). Generates actionable reports with severity-ranked fixes and auto-applies safe fixes to code.
|
|
11
|
+
|
|
12
|
+
USE THIS SKILL whenever the user mentions: SEO, search rankings, Google rankings, meta tags, structured data, schema markup,
|
|
13
|
+
sitemap, robots.txt, Core Web Vitals, page speed optimization, keyword research, content gaps, backlinks, internal linking,
|
|
14
|
+
search console, indexing issues, crawlability, canonical URLs, hreflang, local SEO, Google Business Profile, E-E-A-T,
|
|
15
|
+
topic clusters, on-page optimization, technical SEO audit, SEO fix, rank tracking, competitor SEO analysis, or any request
|
|
16
|
+
to improve a website's search engine visibility — even if they don't explicitly say "SEO". If someone asks "why isn't my
|
|
17
|
+
site ranking?" or "how do I get more organic traffic?", this is the skill to use.
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# SEO Master
|
|
21
|
+
|
|
22
|
+
Complete SEO analysis, optimization, and automated fixing engine. Works on local codebases (React, Next.js, HTML, any framework) and live deployed sites via Firecrawl.
|
|
23
|
+
|
|
24
|
+
## How This Skill Works
|
|
25
|
+
|
|
26
|
+
This skill operates in two modes depending on context:
|
|
27
|
+
|
|
28
|
+
1. **Local codebase mode** — When you're in a project directory. Reads source files directly, analyzes HTML output, checks meta tags in components, validates structured data, reviews sitemap generation, and **auto-fixes** issues in the code.
|
|
29
|
+
|
|
30
|
+
2. **Live site mode** — When given a URL or domain. Uses Firecrawl to crawl the site, extract page data, analyze on-page elements, check technical infrastructure, and generates a report with manual fix instructions.
|
|
31
|
+
|
|
32
|
+
Both modes produce a **Priority-Ranked SEO Report** at the end.
|
|
33
|
+
|
|
34
|
+
## Execution Flow
|
|
35
|
+
|
|
36
|
+
Run these phases in order. Skip phases that don't apply (e.g., skip local code analysis for a site you don't have source access to).
|
|
37
|
+
|
|
38
|
+
### Phase 0: Context Detection
|
|
39
|
+
|
|
40
|
+
Determine the operating mode:
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
IF user provided a URL/domain AND we're not in that project's codebase:
|
|
44
|
+
→ Live site mode (Firecrawl)
|
|
45
|
+
IF we're inside a project directory with source code:
|
|
46
|
+
→ Local codebase mode (direct file access)
|
|
47
|
+
IF both (user gave URL + we have the source):
|
|
48
|
+
→ Hybrid mode (best of both — crawl live + fix source)
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Ask the user which audit scope they want:
|
|
52
|
+
- **Full audit** — everything below (default)
|
|
53
|
+
- **Technical only** — phases 1-2
|
|
54
|
+
- **Content only** — phases 3-4
|
|
55
|
+
- **Quick scan** — critical issues only, fastest
|
|
56
|
+
|
|
57
|
+
### Phase 1: Technical SEO Audit
|
|
58
|
+
|
|
59
|
+
#### 1.1 Crawlability & Indexing
|
|
60
|
+
|
|
61
|
+
**Local mode:**
|
|
62
|
+
- Check for `robots.txt` in public/static directory. Verify it doesn't block important paths.
|
|
63
|
+
- Check for XML sitemap generation (look for sitemap scripts, next-sitemap config, or static sitemap.xml).
|
|
64
|
+
- Verify `<link rel="canonical">` on all pages. Check for duplicates or missing canonicals.
|
|
65
|
+
- Check for `noindex`/`nofollow` meta tags — flag any that shouldn't be there.
|
|
66
|
+
- Scan for orphan pages (routes defined but not linked from any other page).
|
|
67
|
+
- Check redirect configurations (vercel.json, next.config.js, .htaccess) for chains (A→B→C) or loops.
|
|
68
|
+
|
|
69
|
+
**Live mode (Firecrawl):**
|
|
70
|
+
- Crawl the site starting from homepage. Map all discovered URLs.
|
|
71
|
+
- Fetch and parse robots.txt.
|
|
72
|
+
- Fetch and parse sitemap.xml. Compare sitemap URLs vs crawled URLs — flag mismatches.
|
|
73
|
+
- Check HTTP status codes for all pages. Flag 4xx/5xx errors.
|
|
74
|
+
- Detect redirect chains by following each redirect to final destination.
|
|
75
|
+
- Check canonical tags on each crawled page.
|
|
76
|
+
|
|
77
|
+
**What to report:**
|
|
78
|
+
| Check | Status | Details | Fix |
|
|
79
|
+
|-------|--------|---------|-----|
|
|
80
|
+
| robots.txt | Pass/Fail/Warning | What's blocked, what's missing | Specific fix |
|
|
81
|
+
| XML Sitemap | Pass/Fail | URL count, freshness, missing pages | Generate or fix |
|
|
82
|
+
| Canonical tags | Pass/Fail | Pages missing or with wrong canonical | Add/correct |
|
|
83
|
+
| Redirect chains | Pass/Fail | Chain paths found | Simplify to direct |
|
|
84
|
+
| Orphan pages | Warning | Unreachable routes | Add internal links |
|
|
85
|
+
|
|
86
|
+
#### 1.2 Core Web Vitals & Performance
|
|
87
|
+
|
|
88
|
+
**Local mode:**
|
|
89
|
+
- Scan for unoptimized images (no width/height, missing lazy loading, large formats like BMP/TIFF).
|
|
90
|
+
- Check for `loading="lazy"` on below-fold images.
|
|
91
|
+
- Check for `fetchpriority="high"` on LCP candidate (hero image).
|
|
92
|
+
- Verify font loading strategy (font-display: swap, preload for critical fonts).
|
|
93
|
+
- Check for render-blocking CSS/JS in the `<head>`.
|
|
94
|
+
- Look for excessive DOM depth or large component trees.
|
|
95
|
+
- Check bundle splitting configuration (dynamic imports, code splitting).
|
|
96
|
+
- Verify image optimization setup (next/image, vite-imagetools, sharp, etc.).
|
|
97
|
+
|
|
98
|
+
**Live mode:**
|
|
99
|
+
- Use Firecrawl to fetch page HTML. Analyze document structure.
|
|
100
|
+
- Check for resource hints (preconnect, prefetch, preload).
|
|
101
|
+
- Analyze total page weight from HTML content.
|
|
102
|
+
- Check for compression headers (gzip/brotli).
|
|
103
|
+
- Check cache headers on static assets.
|
|
104
|
+
|
|
105
|
+
**What to report:**
|
|
106
|
+
| Metric | Status | Current | Target | Fix |
|
|
107
|
+
|--------|--------|---------|--------|-----|
|
|
108
|
+
| Image optimization | Pass/Fail | Details | Best practice | Specific fix |
|
|
109
|
+
| Font loading | Pass/Fail | Strategy used | font-display: swap | Code change |
|
|
110
|
+
| Code splitting | Pass/Fail | Bundle details | Dynamic imports | Code change |
|
|
111
|
+
| Resource hints | Pass/Fail | What's missing | preconnect/preload | Add tags |
|
|
112
|
+
|
|
113
|
+
#### 1.3 Mobile-First & Accessibility
|
|
114
|
+
|
|
115
|
+
- Check viewport meta tag (`<meta name="viewport" content="width=device-width, initial-scale=1">`).
|
|
116
|
+
- Verify responsive design patterns (media queries, fluid layouts).
|
|
117
|
+
- Check touch target sizes (minimum 48x48px for interactive elements).
|
|
118
|
+
- Scan for horizontal scroll issues (fixed widths > viewport).
|
|
119
|
+
- Check font sizes (minimum 16px body text for mobile readability).
|
|
120
|
+
|
|
121
|
+
#### 1.4 HTTPS & Security Headers
|
|
122
|
+
|
|
123
|
+
**Live mode:**
|
|
124
|
+
- Verify HTTPS with valid certificate.
|
|
125
|
+
- Check security headers: HSTS, X-Content-Type-Options, X-Frame-Options, CSP.
|
|
126
|
+
- Check for mixed content (HTTP resources on HTTPS pages).
|
|
127
|
+
|
|
128
|
+
**Local mode:**
|
|
129
|
+
- Check deployment config for security headers (vercel.json, next.config.js headers).
|
|
130
|
+
- Verify no hardcoded HTTP URLs in source code.
|
|
131
|
+
|
|
132
|
+
### Phase 2: Structured Data & Meta Tags
|
|
133
|
+
|
|
134
|
+
#### 2.1 Meta Tags Audit
|
|
135
|
+
|
|
136
|
+
For every page/route in the project:
|
|
137
|
+
|
|
138
|
+
**Check these tags exist and are optimized:**
|
|
139
|
+
- `<title>` — 50-60 chars, includes primary keyword, unique per page
|
|
140
|
+
- `<meta name="description">` — 150-160 chars, compelling, includes CTA, unique per page
|
|
141
|
+
- `<meta name="robots">` — appropriate directives
|
|
142
|
+
- `<link rel="canonical">` — self-referencing or pointing to correct canonical
|
|
143
|
+
- Open Graph tags: `og:title`, `og:description`, `og:image`, `og:url`, `og:type`
|
|
144
|
+
- Twitter Card tags: `twitter:card`, `twitter:title`, `twitter:description`, `twitter:image`
|
|
145
|
+
- `<meta name="viewport">` — present and correct
|
|
146
|
+
|
|
147
|
+
**Common issues to flag:**
|
|
148
|
+
- Duplicate titles or descriptions across pages
|
|
149
|
+
- Titles too long (truncated in SERP) or too short (wasting space)
|
|
150
|
+
- Missing OG images (hurts social sharing CTR)
|
|
151
|
+
- Generic descriptions that don't differentiate pages
|
|
152
|
+
|
|
153
|
+
**Local mode — how to find meta tags:**
|
|
154
|
+
- React Helmet / react-helmet-async: search for `<Helmet>` or `<HelmetProvider>`
|
|
155
|
+
- Next.js: check `metadata` exports, `generateMetadata()`, or `<Head>` components
|
|
156
|
+
- Plain HTML: check `<head>` sections
|
|
157
|
+
- Vue/Nuxt: check `useHead()`, `useSeoMeta()`, or `<Head>` components
|
|
158
|
+
- Astro: check frontmatter or `<head>` in layouts
|
|
159
|
+
- Search for SEO components: Grep for patterns like `PageSEO`, `SEO`, `Meta`, `Head`
|
|
160
|
+
|
|
161
|
+
#### 2.2 Structured Data (JSON-LD)
|
|
162
|
+
|
|
163
|
+
Check for and recommend structured data types based on page content:
|
|
164
|
+
|
|
165
|
+
| Page Type | Recommended Schema | Priority |
|
|
166
|
+
|-----------|-------------------|----------|
|
|
167
|
+
| Homepage | Organization, WebSite, SearchAction | High |
|
|
168
|
+
| About page | Organization, Person | Medium |
|
|
169
|
+
| Service pages | Service, FAQPage, HowTo | High |
|
|
170
|
+
| Blog posts | Article, BlogPosting, BreadcrumbList | High |
|
|
171
|
+
| Product pages | Product, Offer, AggregateRating | Critical |
|
|
172
|
+
| Contact page | LocalBusiness, ContactPoint | High |
|
|
173
|
+
| FAQ sections | FAQPage | High |
|
|
174
|
+
| Case studies | Article, CreativeWork | Medium |
|
|
175
|
+
| Events | Event | High |
|
|
176
|
+
| Recipes | Recipe | High |
|
|
177
|
+
| Videos | VideoObject | Medium |
|
|
178
|
+
|
|
179
|
+
**Validation checks:**
|
|
180
|
+
- JSON-LD is valid JSON (no syntax errors).
|
|
181
|
+
- Required properties are present per schema.org spec.
|
|
182
|
+
- No deprecated properties used.
|
|
183
|
+
- @context is "https://schema.org".
|
|
184
|
+
- Structured data matches visible page content (no cloaking).
|
|
185
|
+
|
|
186
|
+
**Auto-fix capability (local mode):**
|
|
187
|
+
Generate JSON-LD scripts for pages missing structured data. Place them in the appropriate component or layout. Use existing data from the page content to populate schema fields.
|
|
188
|
+
|
|
189
|
+
#### 2.3 Heading Hierarchy
|
|
190
|
+
|
|
191
|
+
- Verify exactly one `<h1>` per page containing the primary keyword.
|
|
192
|
+
- Check heading hierarchy (h1 → h2 → h3, no skipped levels).
|
|
193
|
+
- Flag pages with no h1 or multiple h1s.
|
|
194
|
+
- Check that headings contain relevant keywords naturally (not keyword-stuffed).
|
|
195
|
+
|
|
196
|
+
### Phase 3: On-Page & Content SEO
|
|
197
|
+
|
|
198
|
+
#### 3.1 Content Quality Analysis
|
|
199
|
+
|
|
200
|
+
For each major page, evaluate:
|
|
201
|
+
|
|
202
|
+
- **Word count** — Informational pages should have 1000+ words for competitive keywords. Thin content (< 300 words) gets flagged.
|
|
203
|
+
- **Keyword usage** — Primary keyword in first 100 words, in h1, in at least one h2, and naturally throughout. Keyword density between 1-2% is healthy — above 3% flags stuffing.
|
|
204
|
+
- **Internal linking** — Each page should link to 3-5 related pages. Check for orphan pages with zero internal links pointing to them.
|
|
205
|
+
- **Image alt text** — Every `<img>` needs descriptive alt text. Flag empty `alt=""` on content images (decorative images with empty alt are OK).
|
|
206
|
+
- **URL structure** — Clean, readable, keyword-containing URLs. Flag dynamic parameters, excessive depth (>3 levels), or non-descriptive slugs.
|
|
207
|
+
|
|
208
|
+
#### 3.2 E-E-A-T Signals
|
|
209
|
+
|
|
210
|
+
Check for signals that demonstrate Experience, Expertise, Authoritativeness, and Trustworthiness:
|
|
211
|
+
|
|
212
|
+
- **Author information** — Do blog posts have named authors with bio pages?
|
|
213
|
+
- **About page** — Does it clearly establish who/what the organization is?
|
|
214
|
+
- **Contact information** — Is there a real address, phone, email?
|
|
215
|
+
- **Credentials** — Are certifications, awards, or affiliations mentioned?
|
|
216
|
+
- **Social proof** — Testimonials, reviews, case studies present?
|
|
217
|
+
- **External references** — Links to authoritative sources?
|
|
218
|
+
- **Content freshness** — Are dates shown? Is content regularly updated?
|
|
219
|
+
- **Privacy policy / Terms** — Do they exist?
|
|
220
|
+
|
|
221
|
+
#### 3.3 Content Gap Analysis
|
|
222
|
+
|
|
223
|
+
If the user provides target keywords or competitors:
|
|
224
|
+
|
|
225
|
+
1. Use Firecrawl/web search to analyze competitor content.
|
|
226
|
+
2. Identify topics competitors cover that the user doesn't.
|
|
227
|
+
3. Find keyword opportunities where competitors rank but the user doesn't.
|
|
228
|
+
4. Suggest content types the user is missing (guides, comparisons, glossaries, tools).
|
|
229
|
+
5. Map content to buyer journey stages (awareness → consideration → decision).
|
|
230
|
+
|
|
231
|
+
#### 3.4 Topic Cluster Strategy
|
|
232
|
+
|
|
233
|
+
If the site has blog/content pages:
|
|
234
|
+
|
|
235
|
+
1. Identify existing topic clusters (groups of related content).
|
|
236
|
+
2. Find gaps in clusters (missing supporting articles).
|
|
237
|
+
3. Suggest pillar page opportunities.
|
|
238
|
+
4. Recommend internal linking between cluster pages.
|
|
239
|
+
5. Provide a content calendar outline for filling gaps.
|
|
240
|
+
|
|
241
|
+
### Phase 4: Local SEO (if applicable)
|
|
242
|
+
|
|
243
|
+
Skip this phase if the business is purely online with no physical location or service area.
|
|
244
|
+
|
|
245
|
+
#### 4.1 Local Schema Markup
|
|
246
|
+
|
|
247
|
+
Check for LocalBusiness or Organization schema with:
|
|
248
|
+
- Business name, address, phone (NAP)
|
|
249
|
+
- Opening hours
|
|
250
|
+
- Geo coordinates
|
|
251
|
+
- Service area (for service-area businesses)
|
|
252
|
+
- Price range
|
|
253
|
+
- Payment methods accepted
|
|
254
|
+
|
|
255
|
+
#### 4.2 NAP Consistency
|
|
256
|
+
|
|
257
|
+
- Verify NAP (Name, Address, Phone) is consistent across:
|
|
258
|
+
- Website footer/contact page
|
|
259
|
+
- Structured data
|
|
260
|
+
- Google Business Profile (if URL provided)
|
|
261
|
+
- Flag any inconsistencies.
|
|
262
|
+
|
|
263
|
+
#### 4.3 Local SEO Checklist
|
|
264
|
+
|
|
265
|
+
| Check | Status | Action |
|
|
266
|
+
|-------|--------|--------|
|
|
267
|
+
| LocalBusiness schema | | Add/fix |
|
|
268
|
+
| NAP on contact page | | Verify |
|
|
269
|
+
| Embedded Google Map | | Add if missing |
|
|
270
|
+
| Location-specific title tags | | Optimize |
|
|
271
|
+
| Location pages (multi-location) | | Create if needed |
|
|
272
|
+
| Local keyword targeting | | Review |
|
|
273
|
+
|
|
274
|
+
### Phase 5: Off-Page SEO Analysis
|
|
275
|
+
|
|
276
|
+
This phase requires live site mode (Firecrawl + web search).
|
|
277
|
+
|
|
278
|
+
#### 5.1 Backlink Profile Overview
|
|
279
|
+
|
|
280
|
+
Use web search to assess:
|
|
281
|
+
- Estimated domain authority/strength.
|
|
282
|
+
- Types of sites linking to the domain.
|
|
283
|
+
- Anchor text patterns.
|
|
284
|
+
- Potential toxic/spammy backlinks.
|
|
285
|
+
- Competitor backlink comparison.
|
|
286
|
+
|
|
287
|
+
#### 5.2 Social Signals
|
|
288
|
+
|
|
289
|
+
Check for:
|
|
290
|
+
- Social media profile links on the website.
|
|
291
|
+
- Open Graph / Twitter Card implementation (covered in Phase 2).
|
|
292
|
+
- Social sharing buttons or functionality.
|
|
293
|
+
- Content shareability assessment.
|
|
294
|
+
|
|
295
|
+
#### 5.3 Link Building Opportunities
|
|
296
|
+
|
|
297
|
+
Based on the site's niche, suggest:
|
|
298
|
+
- Guest posting targets.
|
|
299
|
+
- Resource page opportunities.
|
|
300
|
+
- Broken link building targets.
|
|
301
|
+
- Digital PR angles.
|
|
302
|
+
- Industry directory submissions.
|
|
303
|
+
|
|
304
|
+
### Phase 6: Monitoring & Ongoing SEO
|
|
305
|
+
|
|
306
|
+
#### 6.1 Search Console Readiness
|
|
307
|
+
|
|
308
|
+
Check that the site is set up for monitoring:
|
|
309
|
+
- Sitemap submitted to Search Console (check for sitemap.xml).
|
|
310
|
+
- Google Analytics or equivalent tracking installed.
|
|
311
|
+
- Web Vitals monitoring (check for analytics/vitals reporting endpoint).
|
|
312
|
+
|
|
313
|
+
#### 6.2 SEO Infrastructure
|
|
314
|
+
|
|
315
|
+
- Does the site have an analytics setup? (GA4, Plausible, Fathom, etc.)
|
|
316
|
+
- Is there a Web Vitals collection endpoint?
|
|
317
|
+
- Are there 404 monitoring or error tracking tools?
|
|
318
|
+
- Is there a content update workflow?
|
|
319
|
+
|
|
320
|
+
#### 6.3 Competitor Benchmarking
|
|
321
|
+
|
|
322
|
+
If competitors provided:
|
|
323
|
+
- Compare title/description patterns.
|
|
324
|
+
- Compare structured data usage.
|
|
325
|
+
- Compare content depth and coverage.
|
|
326
|
+
- Compare technical implementation.
|
|
327
|
+
- Identify competitive advantages and gaps.
|
|
328
|
+
|
|
329
|
+
## Auto-Fix Engine (Local Mode Only)
|
|
330
|
+
|
|
331
|
+
After the audit, offer to auto-fix issues that are safe to apply. Categorize fixes by risk:
|
|
332
|
+
|
|
333
|
+
### Safe to Auto-Fix (apply without asking)
|
|
334
|
+
- Add missing `alt` attributes to images (generate descriptive text from context)
|
|
335
|
+
- Add `loading="lazy"` to below-fold images
|
|
336
|
+
- Add `fetchpriority="high"` to hero/LCP images
|
|
337
|
+
- Fix heading hierarchy (h3 → h2 where h2 is skipped)
|
|
338
|
+
- Add missing viewport meta tag
|
|
339
|
+
- Add `font-display: swap` to @font-face declarations
|
|
340
|
+
- Add `rel="noopener noreferrer"` to external links with `target="_blank"`
|
|
341
|
+
|
|
342
|
+
### Fix with Confirmation (show diff, ask user)
|
|
343
|
+
- Generate/update meta titles and descriptions
|
|
344
|
+
- Add or update structured data (JSON-LD)
|
|
345
|
+
- Create or update robots.txt
|
|
346
|
+
- Create or update sitemap generation
|
|
347
|
+
- Add canonical tags
|
|
348
|
+
- Add Open Graph / Twitter Card meta tags
|
|
349
|
+
- Add internal links to orphan pages
|
|
350
|
+
- Optimize URL slugs in route definitions
|
|
351
|
+
|
|
352
|
+
### Report Only (too risky or requires human judgment)
|
|
353
|
+
- Content rewrites for keyword optimization
|
|
354
|
+
- Redirect implementations
|
|
355
|
+
- Hreflang setup for international sites
|
|
356
|
+
- Schema changes for local business info
|
|
357
|
+
- Backlink strategy execution
|
|
358
|
+
|
|
359
|
+
When auto-fixing, always:
|
|
360
|
+
1. Show the user what will change before applying
|
|
361
|
+
2. Make atomic changes (one fix per edit, easy to review)
|
|
362
|
+
3. Run the project's build/type-check after fixes to verify nothing broke
|
|
363
|
+
|
|
364
|
+
## Report Format
|
|
365
|
+
|
|
366
|
+
After all phases, produce a structured report. Use this exact template:
|
|
367
|
+
|
|
368
|
+
```
|
|
369
|
+
# SEO Audit Report: [Site/Project Name]
|
|
370
|
+
**Date:** [date]
|
|
371
|
+
**Mode:** [Local / Live / Hybrid]
|
|
372
|
+
**Scope:** [Full / Technical / Content / Quick]
|
|
373
|
+
|
|
374
|
+
## SEO Score: [X/100]
|
|
375
|
+
|
|
376
|
+
Calculate based on weighted categories:
|
|
377
|
+
- Technical SEO (25%): [X/25]
|
|
378
|
+
- Meta & Structured Data (20%): [X/20]
|
|
379
|
+
- On-Page & Content (25%): [X/25]
|
|
380
|
+
- Performance (15%): [X/15]
|
|
381
|
+
- Local SEO (5%): [X/5] (or N/A)
|
|
382
|
+
- Off-Page (10%): [X/10]
|
|
383
|
+
|
|
384
|
+
## Executive Summary
|
|
385
|
+
|
|
386
|
+
[3-5 sentences: biggest strength, top 3 priorities, overall assessment]
|
|
387
|
+
|
|
388
|
+
## Critical Issues (Fix Immediately)
|
|
389
|
+
|
|
390
|
+
[Issues that are actively hurting rankings or blocking indexing]
|
|
391
|
+
|
|
392
|
+
| # | Issue | Impact | Pages Affected | Fix |
|
|
393
|
+
|---|-------|--------|----------------|-----|
|
|
394
|
+
|
|
395
|
+
## High Priority (Fix This Week)
|
|
396
|
+
|
|
397
|
+
| # | Issue | Impact | Pages Affected | Fix |
|
|
398
|
+
|---|-------|--------|----------------|-----|
|
|
399
|
+
|
|
400
|
+
## Medium Priority (Fix This Month)
|
|
401
|
+
|
|
402
|
+
| # | Issue | Impact | Pages Affected | Fix |
|
|
403
|
+
|---|-------|--------|----------------|-----|
|
|
404
|
+
|
|
405
|
+
## Low Priority (Nice to Have)
|
|
406
|
+
|
|
407
|
+
| # | Issue | Impact | Pages Affected | Fix |
|
|
408
|
+
|---|-------|--------|----------------|-----|
|
|
409
|
+
|
|
410
|
+
## Auto-Fixed Issues
|
|
411
|
+
|
|
412
|
+
[List of issues that were automatically resolved, with before/after]
|
|
413
|
+
|
|
414
|
+
## Keyword Opportunities
|
|
415
|
+
|
|
416
|
+
| Keyword | Difficulty | Intent | Current Status | Recommended Action |
|
|
417
|
+
|---------|-----------|--------|----------------|-------------------|
|
|
418
|
+
|
|
419
|
+
## Content Recommendations
|
|
420
|
+
|
|
421
|
+
[Topic clusters, content gaps, content calendar suggestions]
|
|
422
|
+
|
|
423
|
+
## Technical Details
|
|
424
|
+
|
|
425
|
+
[Detailed findings from each phase, for reference]
|
|
426
|
+
|
|
427
|
+
## Next Steps
|
|
428
|
+
|
|
429
|
+
1. [Most impactful action]
|
|
430
|
+
2. [Second most impactful]
|
|
431
|
+
3. [Third most impactful]
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
## Framework-Specific Patterns
|
|
435
|
+
|
|
436
|
+
When working in local mode, adapt your analysis to the framework:
|
|
437
|
+
|
|
438
|
+
### React (Vite/CRA)
|
|
439
|
+
- SEO component: look for Helmet, react-helmet-async, or custom SEO components
|
|
440
|
+
- Routing: react-router — check all `<Route>` definitions for pages
|
|
441
|
+
- SSR/SSG: Check if using Vite SSR plugin or if it's pure SPA (SPA = limited SEO, flag this)
|
|
442
|
+
- Structured data: usually in SEO components or inline `<script type="application/ld+json">`
|
|
443
|
+
|
|
444
|
+
### Next.js
|
|
445
|
+
- Metadata: check `metadata` exports and `generateMetadata()` in page/layout files
|
|
446
|
+
- Sitemap: check for `sitemap.ts/js` in app directory or next-sitemap config
|
|
447
|
+
- robots.txt: check for `robots.ts/js` in app directory
|
|
448
|
+
- Structured data: JSON-LD in page components or via metadata API
|
|
449
|
+
- Images: check usage of `next/image` vs raw `<img>`
|
|
450
|
+
- Dynamic routes: check `generateStaticParams()` for proper static generation
|
|
451
|
+
|
|
452
|
+
### Astro
|
|
453
|
+
- SEO: check `<head>` in layout components, Astro SEO integration
|
|
454
|
+
- Sitemap: check for `@astrojs/sitemap` integration
|
|
455
|
+
- Content collections: check for proper frontmatter with SEO fields
|
|
456
|
+
|
|
457
|
+
### Vue/Nuxt
|
|
458
|
+
- SEO: check `useHead()`, `useSeoMeta()`, Nuxt SEO module
|
|
459
|
+
- Sitemap: check for `nuxt-simple-sitemap` or `@nuxtjs/sitemap`
|
|
460
|
+
- Routing: check pages directory structure
|
|
461
|
+
|
|
462
|
+
### Static HTML
|
|
463
|
+
- Direct `<head>` inspection per file
|
|
464
|
+
- Check for consistent template patterns across pages
|
|
465
|
+
|
|
466
|
+
## Using Firecrawl for Live Analysis
|
|
467
|
+
|
|
468
|
+
When in live site mode, use Firecrawl to:
|
|
469
|
+
|
|
470
|
+
1. **Crawl the site** — Start from homepage, discover all linked pages
|
|
471
|
+
2. **Extract page data** — Get HTML, meta tags, headings, links, images per page
|
|
472
|
+
3. **Check robots.txt** — Fetch and parse directly
|
|
473
|
+
4. **Check sitemap** — Fetch XML sitemap, parse URLs
|
|
474
|
+
5. **Analyze competitors** — Crawl competitor sites for comparison
|
|
475
|
+
6. **Research keywords** — Search for keyword data and SERP features
|
|
476
|
+
|
|
477
|
+
Firecrawl returns clean markdown optimized for analysis. Use it for any URL fetch — it handles JavaScript rendering and returns structured content.
|
|
478
|
+
|
|
479
|
+
## Important Principles
|
|
480
|
+
|
|
481
|
+
**Prioritize by impact.** Not all SEO issues are equal. A missing h1 on the homepage is critical. A missing alt tag on a decorative footer icon is low priority. Rank everything by actual impact on rankings and traffic.
|
|
482
|
+
|
|
483
|
+
**Don't over-optimize.** Keyword stuffing, excessive schema markup, and manipulative tactics hurt more than they help. The goal is to make the site genuinely useful, well-structured, and easy for search engines to understand.
|
|
484
|
+
|
|
485
|
+
**Context matters.** A personal blog doesn't need LocalBusiness schema. An e-commerce site doesn't need the same content strategy as a SaaS landing page. Adapt recommendations to the actual site type and business goals.
|
|
486
|
+
|
|
487
|
+
**Measure what matters.** Focus on metrics that correlate with rankings: crawlability, page speed, content quality, structured data coverage, and internal linking — not vanity metrics.
|
|
488
|
+
|
|
489
|
+
See `references/structured-data.md` for complete JSON-LD templates for every schema type.
|
|
490
|
+
See `references/checklist.md` for the complete 100-point SEO checklist with pass/fail criteria.
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# 100-Point SEO Checklist
|
|
2
|
+
|
|
3
|
+
Complete pass/fail checklist with scoring. Each item is worth 1 point. Total score = number of passes out of 100.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
1. [Crawlability & Indexing (15 points)](#crawlability--indexing-15-points)
|
|
8
|
+
2. [Meta Tags & Head (15 points)](#meta-tags--head-15-points)
|
|
9
|
+
3. [Structured Data (10 points)](#structured-data-10-points)
|
|
10
|
+
4. [Content & On-Page (20 points)](#content--on-page-20-points)
|
|
11
|
+
5. [Performance & Core Web Vitals (15 points)](#performance--core-web-vitals-15-points)
|
|
12
|
+
6. [Mobile & UX (10 points)](#mobile--ux-10-points)
|
|
13
|
+
7. [Security & Infrastructure (5 points)](#security--infrastructure-5-points)
|
|
14
|
+
8. [Local SEO (5 points)](#local-seo-5-points)
|
|
15
|
+
9. [Off-Page & Social (5 points)](#off-page--social-5-points)
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Crawlability & Indexing (15 points)
|
|
20
|
+
|
|
21
|
+
| # | Check | Pass Criteria | Severity |
|
|
22
|
+
|---|-------|--------------|----------|
|
|
23
|
+
| 1 | robots.txt exists | File present at /robots.txt | Critical |
|
|
24
|
+
| 2 | robots.txt not blocking important pages | No Disallow on key content pages | Critical |
|
|
25
|
+
| 3 | XML sitemap exists | sitemap.xml present and valid | Critical |
|
|
26
|
+
| 4 | Sitemap in robots.txt | Sitemap directive in robots.txt | High |
|
|
27
|
+
| 5 | All important pages in sitemap | Key pages included, 4xx/5xx excluded | High |
|
|
28
|
+
| 6 | Canonical tags on all pages | Every page has self-referencing or correct canonical | High |
|
|
29
|
+
| 7 | No duplicate canonicals | Each canonical URL is unique | Medium |
|
|
30
|
+
| 8 | No redirect chains | All redirects resolve in 1 hop | Medium |
|
|
31
|
+
| 9 | No redirect loops | No circular redirects detected | Critical |
|
|
32
|
+
| 10 | No orphan pages | All pages reachable via internal links | Medium |
|
|
33
|
+
| 11 | Clean URL structure | No query params for content, readable slugs | Medium |
|
|
34
|
+
| 12 | Proper 404 handling | Custom 404 page, correct status code | Medium |
|
|
35
|
+
| 13 | No noindex on important pages | Key pages are indexable | Critical |
|
|
36
|
+
| 14 | Hreflang (if multilingual) | Correct lang codes, reciprocal tags | High |
|
|
37
|
+
| 15 | Crawl budget efficient | No infinite parameter URLs, faceted nav controlled | Medium |
|
|
38
|
+
|
|
39
|
+
## Meta Tags & Head (15 points)
|
|
40
|
+
|
|
41
|
+
| # | Check | Pass Criteria | Severity |
|
|
42
|
+
|---|-------|--------------|----------|
|
|
43
|
+
| 16 | Title tag on every page | All pages have `<title>` | Critical |
|
|
44
|
+
| 17 | Titles are unique | No duplicate titles across pages | High |
|
|
45
|
+
| 18 | Titles 50-60 characters | Within optimal length range | Medium |
|
|
46
|
+
| 19 | Titles include target keyword | Primary keyword in title | High |
|
|
47
|
+
| 20 | Meta description on every page | All pages have meta description | High |
|
|
48
|
+
| 21 | Descriptions are unique | No duplicate descriptions | Medium |
|
|
49
|
+
| 22 | Descriptions 150-160 characters | Within optimal length range | Low |
|
|
50
|
+
| 23 | Descriptions include CTA | Action-oriented language | Low |
|
|
51
|
+
| 24 | Open Graph tags present | og:title, og:description, og:image, og:url | Medium |
|
|
52
|
+
| 25 | OG image meets requirements | 1200x630px minimum, < 8MB | Medium |
|
|
53
|
+
| 26 | Twitter Card tags present | twitter:card, twitter:title, twitter:description | Low |
|
|
54
|
+
| 27 | Viewport meta tag | `width=device-width, initial-scale=1` | Critical |
|
|
55
|
+
| 28 | Language declared | `<html lang="en">` or appropriate | Medium |
|
|
56
|
+
| 29 | Charset declared | `<meta charset="utf-8">` first in head | Medium |
|
|
57
|
+
| 30 | Favicon present | favicon.ico or link rel="icon" | Low |
|
|
58
|
+
|
|
59
|
+
## Structured Data (10 points)
|
|
60
|
+
|
|
61
|
+
| # | Check | Pass Criteria | Severity |
|
|
62
|
+
|---|-------|--------------|----------|
|
|
63
|
+
| 31 | Organization schema on homepage | Valid Organization JSON-LD | High |
|
|
64
|
+
| 32 | WebSite schema on homepage | With SearchAction if site has search | Medium |
|
|
65
|
+
| 33 | BreadcrumbList on inner pages | Correct hierarchy matching navigation | Medium |
|
|
66
|
+
| 34 | Article/BlogPosting on blog posts | With author, date, publisher | High |
|
|
67
|
+
| 35 | FAQPage on FAQ sections | Valid Q&A markup | Medium |
|
|
68
|
+
| 36 | Service schema on service pages | With provider and description | Medium |
|
|
69
|
+
| 37 | LocalBusiness (if applicable) | With NAP, hours, geo | High |
|
|
70
|
+
| 38 | No JSON-LD syntax errors | All scripts parse as valid JSON | Critical |
|
|
71
|
+
| 39 | Schema matches visible content | No hidden or misleading data | Critical |
|
|
72
|
+
| 40 | Required properties present | Per Google's rich result requirements | High |
|
|
73
|
+
|
|
74
|
+
## Content & On-Page (20 points)
|
|
75
|
+
|
|
76
|
+
| # | Check | Pass Criteria | Severity |
|
|
77
|
+
|---|-------|--------------|----------|
|
|
78
|
+
| 41 | One H1 per page | Exactly one `<h1>` on each page | High |
|
|
79
|
+
| 42 | H1 includes primary keyword | Natural keyword inclusion | High |
|
|
80
|
+
| 43 | Heading hierarchy correct | h1→h2→h3 without skipping levels | Medium |
|
|
81
|
+
| 44 | Headings use target keywords | Secondary keywords in h2/h3 | Medium |
|
|
82
|
+
| 45 | Keyword in first 100 words | Primary keyword early in content | Medium |
|
|
83
|
+
| 46 | Keyword density 1-2% | Not over-stuffed, not absent | Medium |
|
|
84
|
+
| 47 | Content length adequate | 300+ words for thin pages, 1000+ for competitive keywords | Medium |
|
|
85
|
+
| 48 | All images have alt text | Descriptive alt attributes on content images | High |
|
|
86
|
+
| 49 | Alt text includes keywords | Where natural and relevant | Low |
|
|
87
|
+
| 50 | Internal links present | 3-5 internal links per content page | High |
|
|
88
|
+
| 51 | Internal link anchor text descriptive | Not "click here" or "read more" | Medium |
|
|
89
|
+
| 52 | External links to authoritative sources | Links out to trusted references | Low |
|
|
90
|
+
| 53 | External links have rel attributes | `noopener noreferrer` on target="_blank" | Medium |
|
|
91
|
+
| 54 | No broken internal links | All internal links resolve | High |
|
|
92
|
+
| 55 | No broken external links | External links return 200 | Medium |
|
|
93
|
+
| 56 | Content is original | No duplicate content issues | Critical |
|
|
94
|
+
| 57 | E-E-A-T: Author attribution | Blog posts have named authors | Medium |
|
|
95
|
+
| 58 | E-E-A-T: About page | Clear organization/person info | Medium |
|
|
96
|
+
| 59 | E-E-A-T: Contact info visible | Email, phone, or contact form | Medium |
|
|
97
|
+
| 60 | E-E-A-T: Social proof | Testimonials, reviews, or case studies | Low |
|
|
98
|
+
|
|
99
|
+
## Performance & Core Web Vitals (15 points)
|
|
100
|
+
|
|
101
|
+
| # | Check | Pass Criteria | Severity |
|
|
102
|
+
|---|-------|--------------|----------|
|
|
103
|
+
| 61 | Images optimized | WebP/AVIF format, appropriate dimensions | High |
|
|
104
|
+
| 62 | Images have width/height | Explicit dimensions prevent CLS | High |
|
|
105
|
+
| 63 | Lazy loading on below-fold images | `loading="lazy"` attribute | Medium |
|
|
106
|
+
| 64 | Hero image prioritized | `fetchpriority="high"` on LCP image | High |
|
|
107
|
+
| 65 | Fonts optimized | `font-display: swap`, preloaded critical fonts | Medium |
|
|
108
|
+
| 66 | No render-blocking resources | Critical CSS inlined or async loading | High |
|
|
109
|
+
| 67 | Code splitting implemented | Dynamic imports for route-based splitting | Medium |
|
|
110
|
+
| 68 | Bundle size reasonable | Main bundle < 200KB gzipped | Medium |
|
|
111
|
+
| 69 | Compression enabled | gzip or brotli on text assets | High |
|
|
112
|
+
| 70 | Cache headers set | Static assets cached with long TTL | Medium |
|
|
113
|
+
| 71 | Resource hints present | preconnect for external origins | Medium |
|
|
114
|
+
| 72 | No excessive DOM depth | DOM tree < 1500 nodes for mobile | Medium |
|
|
115
|
+
| 73 | CSS purging/tree-shaking | Unused CSS removed | Low |
|
|
116
|
+
| 74 | JavaScript tree-shaking | Dead code eliminated | Low |
|
|
117
|
+
| 75 | Preconnect to image CDN | `<link rel="preconnect">` for image hosts | Medium |
|
|
118
|
+
|
|
119
|
+
## Mobile & UX (10 points)
|
|
120
|
+
|
|
121
|
+
| # | Check | Pass Criteria | Severity |
|
|
122
|
+
|---|-------|--------------|----------|
|
|
123
|
+
| 76 | Responsive design | Adapts to all screen sizes | Critical |
|
|
124
|
+
| 77 | Touch targets 48x48px minimum | Interactive elements large enough | High |
|
|
125
|
+
| 78 | No horizontal scrolling | Content fits viewport width | High |
|
|
126
|
+
| 79 | Font size 16px+ on mobile | Body text readable without zooming | Medium |
|
|
127
|
+
| 80 | No intrusive interstitials | No popups covering main content on mobile | High |
|
|
128
|
+
| 81 | Content accessible without JS | Core content visible if JS fails (SSR/SSG) | Medium |
|
|
129
|
+
| 82 | Smooth scrolling behavior | No janky scroll, proper scroll restoration | Low |
|
|
130
|
+
| 83 | Accessible navigation | Keyboard navigable, proper ARIA | High |
|
|
131
|
+
| 84 | Color contrast passes WCAG AA | 4.5:1 for text, 3:1 for large text | Medium |
|
|
132
|
+
| 85 | Skip to main content link | For screen reader accessibility | Low |
|
|
133
|
+
|
|
134
|
+
## Security & Infrastructure (5 points)
|
|
135
|
+
|
|
136
|
+
| # | Check | Pass Criteria | Severity |
|
|
137
|
+
|---|-------|--------------|----------|
|
|
138
|
+
| 86 | HTTPS everywhere | Valid SSL, no mixed content | Critical |
|
|
139
|
+
| 87 | HSTS header present | Strict-Transport-Security set | High |
|
|
140
|
+
| 88 | Security headers configured | CSP, X-Content-Type-Options, X-Frame-Options | Medium |
|
|
141
|
+
| 89 | No exposed sensitive files | No .env, .git, wp-config accessible | Critical |
|
|
142
|
+
| 90 | HTTP to HTTPS redirect | All HTTP requests redirect to HTTPS | High |
|
|
143
|
+
|
|
144
|
+
## Local SEO (5 points)
|
|
145
|
+
|
|
146
|
+
Skip if not applicable (online-only business). Award all 5 points if N/A.
|
|
147
|
+
|
|
148
|
+
| # | Check | Pass Criteria | Severity |
|
|
149
|
+
|---|-------|--------------|----------|
|
|
150
|
+
| 91 | NAP consistent | Same Name/Address/Phone everywhere | High |
|
|
151
|
+
| 92 | LocalBusiness schema complete | All required fields populated | High |
|
|
152
|
+
| 93 | Google Maps embedded | On contact page | Medium |
|
|
153
|
+
| 94 | Location in title tags | City/region in key page titles | Medium |
|
|
154
|
+
| 95 | Location pages (multi-location) | Unique page per location | Medium |
|
|
155
|
+
|
|
156
|
+
## Off-Page & Social (5 points)
|
|
157
|
+
|
|
158
|
+
| # | Check | Pass Criteria | Severity |
|
|
159
|
+
|---|-------|--------------|----------|
|
|
160
|
+
| 96 | Social media profiles linked | Links to active social accounts | Low |
|
|
161
|
+
| 97 | OG tags produce good previews | Tested with social media debuggers | Medium |
|
|
162
|
+
| 98 | Shareable content present | Blog, resources, or tools worth sharing | Low |
|
|
163
|
+
| 99 | Privacy policy page | Accessible from footer | Medium |
|
|
164
|
+
| 100 | Terms of service page | Accessible from footer | Low |
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Scoring Guide
|
|
169
|
+
|
|
170
|
+
| Score | Rating | Assessment |
|
|
171
|
+
|-------|--------|------------|
|
|
172
|
+
| 90-100 | Excellent | SEO-optimized, minor improvements only |
|
|
173
|
+
| 75-89 | Good | Solid foundation, some gaps to address |
|
|
174
|
+
| 60-74 | Fair | Needs attention, several important issues |
|
|
175
|
+
| 40-59 | Poor | Significant problems hurting rankings |
|
|
176
|
+
| 0-39 | Critical | Major SEO barriers, urgent fixes needed |
|
|
177
|
+
|
|
178
|
+
## Priority Matrix
|
|
179
|
+
|
|
180
|
+
When reporting issues, rank by this matrix:
|
|
181
|
+
|
|
182
|
+
```
|
|
183
|
+
HIGH IMPACT
|
|
184
|
+
|
|
|
185
|
+
CRITICAL | HIGH
|
|
186
|
+
(fix now) | (fix this week)
|
|
187
|
+
-----------------+------------------
|
|
188
|
+
MEDIUM | LOW
|
|
189
|
+
(fix month) | (nice to have)
|
|
190
|
+
|
|
|
191
|
+
LOW IMPACT
|
|
192
|
+
|
|
193
|
+
EASY FIX ←————————————→ HARD FIX
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
- **Critical** = High impact + Easy fix (quick wins)
|
|
197
|
+
- **High** = High impact + Hard fix (strategic investments)
|
|
198
|
+
- **Medium** = Low impact + Easy fix (batch these)
|
|
199
|
+
- **Low** = Low impact + Hard fix (backlog)
|