optbrew 0.0.0-stage → 0.1.2
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/.claude-plugin/marketplace.json +6 -0
- package/.claude-plugin/plugin.json +6 -0
- package/.codex-plugin/plugin.json +13 -0
- package/CHANGELOG.md +50 -0
- package/LICENSE +21 -0
- package/README.ko.md +149 -0
- package/README.md +148 -2
- package/THIRD_PARTY_NOTICES.md +10 -0
- package/bin/optbrew.mjs +4 -0
- package/docs/platforms.md +107 -0
- package/docs/release.md +14 -0
- package/lib/cli.mjs +116 -0
- package/lib/doctor.mjs +45 -0
- package/lib/install.mjs +158 -0
- package/lib/paths.mjs +30 -0
- package/lib/records.mjs +44 -0
- package/lib/reinstall.mjs +92 -0
- package/lib/transaction.mjs +205 -0
- package/lib/update.mjs +189 -0
- package/package.json +39 -4
- package/plugin.json +13 -0
- package/skills/optbrew/LICENSE +21 -0
- package/skills/optbrew/SKILL.md +17 -0
- package/skills/optbrew/THIRD_PARTY_NOTICES.md +10 -0
- package/skills/optbrew/agents/openai.yaml +4 -0
- package/skills/optbrew/bundle-manifest.json +687 -0
- package/skills/optbrew/licenses/firecrawl-seo-audit.txt +15 -0
- package/skills/optbrew/licenses/magnus-seo.txt +21 -0
- package/skills/optbrew/licenses/marketing-search.txt +21 -0
- package/skills/optbrew/licenses/mblode-seo.txt +21 -0
- package/skills/optbrew/licenses/naver-searchadvisor.txt +29 -0
- package/skills/optbrew/licenses/seranking-seo.txt +21 -0
- package/skills/optbrew/modules/firecrawl-seo-audit/GUIDE.md +64 -0
- package/skills/optbrew/modules/magnus-seo/GUIDE.md +79 -0
- package/skills/optbrew/modules/magnus-seo/README.md +45 -0
- package/skills/optbrew/modules/magnus-seo/assets/audit-report-template.md +76 -0
- package/skills/optbrew/modules/magnus-seo/references/aeo-methodology.md +105 -0
- package/skills/optbrew/modules/magnus-seo/references/agent-readable-content.md +28 -0
- package/skills/optbrew/modules/magnus-seo/references/content-and-entity-architecture.md +100 -0
- package/skills/optbrew/modules/magnus-seo/references/content-strategy-seo.md +142 -0
- package/skills/optbrew/modules/magnus-seo/references/discovery-and-freshness.md +47 -0
- package/skills/optbrew/modules/magnus-seo/references/evidence-boundaries.md +75 -0
- package/skills/optbrew/modules/magnus-seo/references/ghost-metadata.md +204 -0
- package/skills/optbrew/modules/magnus-seo/references/implementation-playbook.md +114 -0
- package/skills/optbrew/modules/magnus-seo/references/measurement-and-experimentation.md +47 -0
- package/skills/optbrew/modules/magnus-seo/references/onpage-seo.md +154 -0
- package/skills/optbrew/modules/magnus-seo/references/platform-guidance.md +30 -0
- package/skills/optbrew/modules/magnus-seo/references/schema-markup.md +244 -0
- package/skills/optbrew/modules/magnus-seo/references/source-index.md +36 -0
- package/skills/optbrew/modules/magnus-seo/references/structured-data.md +56 -0
- package/skills/optbrew/modules/magnus-seo/references/technical-seo.md +99 -0
- package/skills/optbrew/modules/magnus-seo/scripts/aeo_audit.py +158 -0
- package/skills/optbrew/modules/magnus-seo/scripts/build_prompt_matrix.py +52 -0
- package/skills/optbrew/modules/magnus-seo/templates/aeo-implementation-plan.md +53 -0
- package/skills/optbrew/modules/magnus-seo/templates/citation-observation-log.md +16 -0
- package/skills/optbrew/modules/magnus-seo/templates/llms.txt.template +15 -0
- package/skills/optbrew/modules/magnus-seo/templates/question-cluster.md +27 -0
- package/skills/optbrew/modules/magnus-seo/templates/robots-ai-crawlers.txt +23 -0
- package/skills/optbrew/modules/marketing-search/skills/ai-seo/GUIDE.md +483 -0
- package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/agent-readiness.md +57 -0
- package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/citations-vs-recommendations.md +85 -0
- package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/content-patterns.md +287 -0
- package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/content-types.md +71 -0
- package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/format-volatility.md +98 -0
- package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/okf.md +104 -0
- package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/platform-ranking-factors.md +154 -0
- package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/youtube-ai-citations.md +60 -0
- package/skills/optbrew/modules/marketing-search/skills/analytics/GUIDE.md +303 -0
- package/skills/optbrew/modules/marketing-search/skills/analytics/references/event-library.md +260 -0
- package/skills/optbrew/modules/marketing-search/skills/analytics/references/ga4-implementation.md +300 -0
- package/skills/optbrew/modules/marketing-search/skills/analytics/references/gtm-implementation.md +390 -0
- package/skills/optbrew/modules/marketing-search/skills/content-strategy/GUIDE.md +432 -0
- package/skills/optbrew/modules/marketing-search/skills/content-strategy/references/content-distribution.md +83 -0
- package/skills/optbrew/modules/marketing-search/skills/content-strategy/references/headless-cms.md +194 -0
- package/skills/optbrew/modules/marketing-search/skills/programmatic-seo/GUIDE.md +231 -0
- package/skills/optbrew/modules/marketing-search/skills/programmatic-seo/references/playbooks.md +308 -0
- package/skills/optbrew/modules/marketing-search/skills/schema/GUIDE.md +172 -0
- package/skills/optbrew/modules/marketing-search/skills/schema/references/schema-examples.md +398 -0
- package/skills/optbrew/modules/marketing-search/skills/seo-audit/GUIDE.md +492 -0
- package/skills/optbrew/modules/marketing-search/skills/seo-audit/references/ai-writing-detection.md +200 -0
- package/skills/optbrew/modules/marketing-search/skills/seo-audit/references/international-seo.md +230 -0
- package/skills/optbrew/modules/marketing-search/skills/site-architecture/GUIDE.md +350 -0
- package/skills/optbrew/modules/marketing-search/skills/site-architecture/references/mermaid-templates.md +216 -0
- package/skills/optbrew/modules/marketing-search/skills/site-architecture/references/navigation-patterns.md +305 -0
- package/skills/optbrew/modules/marketing-search/skills/site-architecture/references/site-type-templates.md +293 -0
- package/skills/optbrew/modules/mblode-seo/GUIDE.md +74 -0
- package/skills/optbrew/modules/mblode-seo/references/answer-engines.md +58 -0
- package/skills/optbrew/modules/mblode-seo/references/audit.md +78 -0
- package/skills/optbrew/modules/mblode-seo/references/brief-template.md +47 -0
- package/skills/optbrew/modules/mblode-seo/references/monitoring.md +56 -0
- package/skills/optbrew/modules/mblode-seo/references/nextjs-implementation.md +65 -0
- package/skills/optbrew/modules/mblode-seo/references/research-protocol.md +37 -0
- package/skills/optbrew/modules/mblode-seo/references/sources.md +47 -0
- package/skills/optbrew/modules/mblode-seo/references/validation-evidence.md +21 -0
- package/skills/optbrew/modules/naver-searchadvisor/GUIDE.md +75 -0
- package/skills/optbrew/modules/naver-searchadvisor/NOTICE.md +59 -0
- package/skills/optbrew/modules/naver-searchadvisor/references/INDEX.md +97 -0
- package/skills/optbrew/modules/naver-searchadvisor/scripts/audit.mjs +742 -0
- package/skills/optbrew/modules/naver-searchadvisor/scripts/robots.mjs +77 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-ai-search-share-of-voice/GUIDE.md +94 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-api/GUIDE.md +186 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-api/references/api-surface-map.md +207 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-api/references/auth-and-keys.md +182 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-api/references/integration-patterns.md +283 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-api/references/rate-limits-and-credits.md +235 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-competitor-gap-analysis/GUIDE.md +117 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-content-audit/GUIDE.md +155 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-content-audit/references/cite.md +84 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-content-audit/references/core-eeat.md +147 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-content-audit/templates/verdict.md +63 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-firecrawl/GUIDE.md +141 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-firecrawl/references/preflight.md +73 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-geo/GUIDE.md +159 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-google/GUIDE.md +393 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-google/assets/templates/cwv-audit-report.md +48 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-google/assets/templates/gsc-performance-report.md +44 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-google/assets/templates/indexation-status-report.md +43 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/auth-setup.md +160 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/cross-skill-integration.md +187 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/ga4-data-api.md +184 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/indexing-api.md +109 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/keyword-planner-api.md +66 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/nlp-api.md +55 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/pagespeed-crux-api.md +204 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/rate-limits-quotas.md +75 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/search-console-api.md +156 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/supplementary-apis.md +99 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/youtube-api.md +49 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-keyword-niche/GUIDE.md +174 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-page/GUIDE.md +174 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-plan/GUIDE.md +220 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-schema/GUIDE.md +135 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-schema/references/google-rich-results.md +89 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-schema/templates/article.json +23 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-schema/templates/breadcrumb-list.json +18 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-schema/templates/faq-page.json +22 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-schema/templates/local-business.json +32 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-schema/templates/product.json +25 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-sitemap/GUIDE.md +128 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-technical-audit/GUIDE.md +235 -0
- package/skills/optbrew/modules/seranking-seo/skills/seo-technical-audit/references/severity-mapping.md +133 -0
- package/skills/optbrew/references/ai-crawlers.json +21 -0
- package/skills/optbrew/references/ai-crawlers.md +24 -0
- package/skills/optbrew/references/api.md +45 -0
- package/skills/optbrew/references/check-registry.json +28 -0
- package/skills/optbrew/references/evidence.md +9 -0
- package/skills/optbrew/references/intake.md +9 -0
- package/skills/optbrew/references/measurement.md +29 -0
- package/skills/optbrew/references/policies.md +7 -0
- package/skills/optbrew/references/profiles.json +13 -0
- package/skills/optbrew/references/remediations.json +12 -0
- package/skills/optbrew/references/report.md +29 -0
- package/skills/optbrew/references/routing.md +15 -0
- package/skills/optbrew/references/schemas/contract.schema.json +51 -0
- package/skills/optbrew/references/scoring.md +62 -0
- package/skills/optbrew/scripts/adapters/anthropic.mjs +116 -0
- package/skills/optbrew/scripts/adapters/imports.mjs +81 -0
- package/skills/optbrew/scripts/audit.mjs +124 -0
- package/skills/optbrew/scripts/cli.mjs +41 -0
- package/skills/optbrew/scripts/core/bootstrap.mjs +31 -0
- package/skills/optbrew/scripts/core/bundle.mjs +73 -0
- package/skills/optbrew/scripts/core/capabilities.mjs +19 -0
- package/skills/optbrew/scripts/core/collector.mjs +250 -0
- package/skills/optbrew/scripts/core/compare.mjs +47 -0
- package/skills/optbrew/scripts/core/contracts.mjs +144 -0
- package/skills/optbrew/scripts/core/cost-ledger.mjs +95 -0
- package/skills/optbrew/scripts/core/crawlers.mjs +11 -0
- package/skills/optbrew/scripts/core/derive.mjs +168 -0
- package/skills/optbrew/scripts/core/facts.mjs +189 -0
- package/skills/optbrew/scripts/core/findings.mjs +54 -0
- package/skills/optbrew/scripts/core/html.mjs +53 -0
- package/skills/optbrew/scripts/core/metrics.mjs +97 -0
- package/skills/optbrew/scripts/core/protocol.mjs +125 -0
- package/skills/optbrew/scripts/core/report.mjs +742 -0
- package/skills/optbrew/scripts/core/scope.mjs +52 -0
- package/skills/optbrew/scripts/core/score.mjs +71 -0
- package/skills/optbrew/scripts/core/weights.mjs +139 -0
- package/skills/optbrew/source-lock.json +2686 -0
- package/source-lock.json +2686 -0
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
# Site Type Templates
|
|
2
|
+
|
|
3
|
+
Full page hierarchy templates with ASCII trees, URL maps, and navigation recommendations for common site types.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## SaaS Marketing Site
|
|
8
|
+
|
|
9
|
+
### Page Hierarchy
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
Homepage (/)
|
|
13
|
+
├── Features (/features)
|
|
14
|
+
│ ├── Feature A (/features/feature-a)
|
|
15
|
+
│ ├── Feature B (/features/feature-b)
|
|
16
|
+
│ └── Feature C (/features/feature-c)
|
|
17
|
+
├── Pricing (/pricing)
|
|
18
|
+
├── Customers (/customers)
|
|
19
|
+
│ ├── Case Study 1 (/customers/company-name)
|
|
20
|
+
│ └── Case Study 2 (/customers/company-name-2)
|
|
21
|
+
├── Resources (/resources)
|
|
22
|
+
│ ├── Blog (/blog)
|
|
23
|
+
│ │ └── [Posts] (/blog/post-slug)
|
|
24
|
+
│ ├── Templates (/resources/templates)
|
|
25
|
+
│ │ └── [Template] (/resources/templates/template-slug)
|
|
26
|
+
│ └── Guides (/resources/guides)
|
|
27
|
+
│ └── [Guide] (/resources/guides/guide-slug)
|
|
28
|
+
├── Integrations (/integrations)
|
|
29
|
+
│ └── [Integration] (/integrations/integration-name)
|
|
30
|
+
├── Docs (/docs)
|
|
31
|
+
│ ├── Getting Started (/docs/getting-started)
|
|
32
|
+
│ ├── Guides (/docs/guides)
|
|
33
|
+
│ └── API Reference (/docs/api)
|
|
34
|
+
├── About (/about)
|
|
35
|
+
│ ├── Careers (/about/careers)
|
|
36
|
+
│ └── Contact (/contact)
|
|
37
|
+
├── Compare (/compare)
|
|
38
|
+
│ └── [Competitor] (/compare/competitor-name)
|
|
39
|
+
├── Privacy (/privacy)
|
|
40
|
+
└── Terms (/terms)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### URL Map
|
|
44
|
+
|
|
45
|
+
| Page | URL | Nav Location | Priority |
|
|
46
|
+
|------|-----|-------------|----------|
|
|
47
|
+
| Homepage | `/` | Header (logo) | Critical |
|
|
48
|
+
| Features | `/features` | Header | High |
|
|
49
|
+
| Feature pages | `/features/{slug}` | Header dropdown | Medium |
|
|
50
|
+
| Pricing | `/pricing` | Header | Critical |
|
|
51
|
+
| Customers | `/customers` | Header | Medium |
|
|
52
|
+
| Case studies | `/customers/{slug}` | Customers dropdown | Medium |
|
|
53
|
+
| Blog | `/blog` | Header (Resources) | High |
|
|
54
|
+
| Blog posts | `/blog/{slug}` | — | Medium |
|
|
55
|
+
| Integrations | `/integrations` | Header | Medium |
|
|
56
|
+
| Docs | `/docs` | Header | Medium |
|
|
57
|
+
| Compare | `/compare/{slug}` | Footer | High (SEO) |
|
|
58
|
+
| About | `/about` | Footer | Low |
|
|
59
|
+
| Pricing CTA | `/pricing` | Header (CTA button) | Critical |
|
|
60
|
+
|
|
61
|
+
### Navigation
|
|
62
|
+
|
|
63
|
+
**Header (6 items + CTA)**: Features | Pricing | Customers | Resources | Integrations | Docs | [Get Started]
|
|
64
|
+
|
|
65
|
+
**Footer columns**:
|
|
66
|
+
- Product: Features, Pricing, Integrations, Changelog, Security
|
|
67
|
+
- Resources: Blog, Templates, Guides, Case Studies
|
|
68
|
+
- Company: About, Careers, Contact, Press
|
|
69
|
+
- Legal: Privacy, Terms, Security
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Content / Blog Site
|
|
74
|
+
|
|
75
|
+
### Page Hierarchy
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
Homepage (/)
|
|
79
|
+
├── Blog (/blog)
|
|
80
|
+
│ ├── [Category: Topic A] (/blog/category/topic-a)
|
|
81
|
+
│ ├── [Category: Topic B] (/blog/category/topic-b)
|
|
82
|
+
│ ├── [Category: Topic C] (/blog/category/topic-c)
|
|
83
|
+
│ └── [Posts] (/blog/post-slug)
|
|
84
|
+
├── Newsletter (/newsletter)
|
|
85
|
+
├── Resources (/resources)
|
|
86
|
+
│ ├── Guides (/resources/guides)
|
|
87
|
+
│ │ └── [Guide] (/resources/guides/guide-slug)
|
|
88
|
+
│ └── Tools (/resources/tools)
|
|
89
|
+
│ └── [Tool] (/resources/tools/tool-slug)
|
|
90
|
+
├── About (/about)
|
|
91
|
+
├── Contact (/contact)
|
|
92
|
+
├── Privacy (/privacy)
|
|
93
|
+
└── Terms (/terms)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### URL Map
|
|
97
|
+
|
|
98
|
+
| Page | URL | Nav Location | Priority |
|
|
99
|
+
|------|-----|-------------|----------|
|
|
100
|
+
| Homepage | `/` | Header (logo) | Critical |
|
|
101
|
+
| Blog index | `/blog` | Header | High |
|
|
102
|
+
| Categories | `/blog/category/{slug}` | Header dropdown | Medium |
|
|
103
|
+
| Posts | `/blog/{slug}` | — | Medium |
|
|
104
|
+
| Newsletter | `/newsletter` | Header (CTA) | High |
|
|
105
|
+
| Guides | `/resources/guides` | Header | Medium |
|
|
106
|
+
| About | `/about` | Header | Low |
|
|
107
|
+
|
|
108
|
+
### Navigation
|
|
109
|
+
|
|
110
|
+
**Header (4 items + CTA)**: Blog | Resources | About | Contact | [Subscribe]
|
|
111
|
+
|
|
112
|
+
**Sidebar** (on blog): Categories, Popular Posts, Newsletter signup
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## E-Commerce
|
|
117
|
+
|
|
118
|
+
### Page Hierarchy
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
Homepage (/)
|
|
122
|
+
├── Shop (/shop)
|
|
123
|
+
│ ├── Category A (/shop/category-a)
|
|
124
|
+
│ │ ├── Subcategory (/shop/category-a/subcategory)
|
|
125
|
+
│ │ │ └── [Product] (/shop/category-a/subcategory/product-slug)
|
|
126
|
+
│ │ └── [Product] (/shop/category-a/product-slug)
|
|
127
|
+
│ ├── Category B (/shop/category-b)
|
|
128
|
+
│ │ └── [Product] (/shop/category-b/product-slug)
|
|
129
|
+
│ └── Category C (/shop/category-c)
|
|
130
|
+
│ └── [Product] (/shop/category-c/product-slug)
|
|
131
|
+
├── Collections (/collections)
|
|
132
|
+
│ └── [Collection] (/collections/collection-slug)
|
|
133
|
+
├── Sale (/sale)
|
|
134
|
+
├── Blog (/blog)
|
|
135
|
+
│ └── [Posts] (/blog/post-slug)
|
|
136
|
+
├── About (/about)
|
|
137
|
+
│ └── Our Story (/about/our-story)
|
|
138
|
+
├── Help (/help)
|
|
139
|
+
│ ├── FAQ (/help/faq)
|
|
140
|
+
│ ├── Shipping (/help/shipping)
|
|
141
|
+
│ ├── Returns (/help/returns)
|
|
142
|
+
│ └── Contact (/contact)
|
|
143
|
+
├── Cart (/cart)
|
|
144
|
+
├── Account (/account)
|
|
145
|
+
├── Privacy (/privacy)
|
|
146
|
+
└── Terms (/terms)
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### URL Map
|
|
150
|
+
|
|
151
|
+
| Page | URL | Nav Location | Priority |
|
|
152
|
+
|------|-----|-------------|----------|
|
|
153
|
+
| Homepage | `/` | Header (logo) | Critical |
|
|
154
|
+
| Shop | `/shop` | Header | Critical |
|
|
155
|
+
| Categories | `/shop/{category}` | Header mega menu | High |
|
|
156
|
+
| Products | `/shop/{category}/{product}` | — | High |
|
|
157
|
+
| Collections | `/collections/{slug}` | Header | Medium |
|
|
158
|
+
| Sale | `/sale` | Header (highlighted) | High |
|
|
159
|
+
| Cart | `/cart` | Header (icon) | Critical |
|
|
160
|
+
| Account | `/account` | Header (icon) | Medium |
|
|
161
|
+
|
|
162
|
+
### Navigation
|
|
163
|
+
|
|
164
|
+
**Header (5 items + cart/account)**: Shop (mega menu) | Collections | Sale | Blog | Help | [Cart icon] [Account icon]
|
|
165
|
+
|
|
166
|
+
**Mega menu under Shop**: Category columns with featured products/images
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## Documentation Site
|
|
171
|
+
|
|
172
|
+
### Page Hierarchy
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
Docs Home (/docs)
|
|
176
|
+
├── Getting Started (/docs/getting-started)
|
|
177
|
+
│ ├── Installation (/docs/getting-started/installation)
|
|
178
|
+
│ ├── Quick Start (/docs/getting-started/quick-start)
|
|
179
|
+
│ └── Configuration (/docs/getting-started/configuration)
|
|
180
|
+
├── Guides (/docs/guides)
|
|
181
|
+
│ ├── Guide A (/docs/guides/guide-a)
|
|
182
|
+
│ ├── Guide B (/docs/guides/guide-b)
|
|
183
|
+
│ └── Guide C (/docs/guides/guide-c)
|
|
184
|
+
├── API Reference (/docs/api)
|
|
185
|
+
│ ├── Authentication (/docs/api/authentication)
|
|
186
|
+
│ ├── Endpoints (/docs/api/endpoints)
|
|
187
|
+
│ └── Webhooks (/docs/api/webhooks)
|
|
188
|
+
├── Examples (/docs/examples)
|
|
189
|
+
│ └── [Example] (/docs/examples/example-slug)
|
|
190
|
+
├── Changelog (/docs/changelog)
|
|
191
|
+
└── FAQ (/docs/faq)
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### URL Map
|
|
195
|
+
|
|
196
|
+
| Page | URL | Nav Location | Priority |
|
|
197
|
+
|------|-----|-------------|----------|
|
|
198
|
+
| Docs home | `/docs` | Header | High |
|
|
199
|
+
| Getting Started | `/docs/getting-started` | Sidebar (top) | Critical |
|
|
200
|
+
| Guides | `/docs/guides` | Sidebar | High |
|
|
201
|
+
| API Reference | `/docs/api` | Sidebar | High |
|
|
202
|
+
| Changelog | `/docs/changelog` | Sidebar (bottom) | Low |
|
|
203
|
+
|
|
204
|
+
### Navigation
|
|
205
|
+
|
|
206
|
+
**Header**: Docs | API | Blog | Community | GitHub | [Dashboard]
|
|
207
|
+
|
|
208
|
+
**Sidebar** (persistent, left): Getting Started, Guides, API Reference, Examples, Changelog — with expandable subsections
|
|
209
|
+
|
|
210
|
+
**On-page**: Previous/Next navigation at bottom of each doc page
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Hybrid SaaS + Content
|
|
215
|
+
|
|
216
|
+
### Page Hierarchy
|
|
217
|
+
|
|
218
|
+
```
|
|
219
|
+
Homepage (/)
|
|
220
|
+
├── Product (/product)
|
|
221
|
+
│ ├── Feature A (/product/feature-a)
|
|
222
|
+
│ ├── Feature B (/product/feature-b)
|
|
223
|
+
│ └── Feature C (/product/feature-c)
|
|
224
|
+
├── Solutions (/solutions)
|
|
225
|
+
│ ├── By Use Case (/solutions/use-case-slug)
|
|
226
|
+
│ └── By Industry (/solutions/industry-slug)
|
|
227
|
+
├── Pricing (/pricing)
|
|
228
|
+
├── Blog (/blog)
|
|
229
|
+
│ ├── [Category] (/blog/category/slug)
|
|
230
|
+
│ └── [Posts] (/blog/post-slug)
|
|
231
|
+
├── Resources (/resources)
|
|
232
|
+
│ ├── Guides (/resources/guides)
|
|
233
|
+
│ ├── Templates (/resources/templates)
|
|
234
|
+
│ ├── Webinars (/resources/webinars)
|
|
235
|
+
│ └── Case Studies (/resources/case-studies)
|
|
236
|
+
├── Docs (/docs)
|
|
237
|
+
│ ├── Getting Started (/docs/getting-started)
|
|
238
|
+
│ └── API (/docs/api)
|
|
239
|
+
├── Integrations (/integrations)
|
|
240
|
+
│ └── [Integration] (/integrations/slug)
|
|
241
|
+
├── Compare (/compare)
|
|
242
|
+
│ └── [Competitor] (/compare/competitor-slug)
|
|
243
|
+
├── About (/about)
|
|
244
|
+
│ ├── Careers (/about/careers)
|
|
245
|
+
│ └── Contact (/contact)
|
|
246
|
+
├── Privacy (/privacy)
|
|
247
|
+
└── Terms (/terms)
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### Navigation
|
|
251
|
+
|
|
252
|
+
**Header (7 items + CTA)**: Product | Solutions | Pricing | Resources | Blog | Docs | Integrations | [Start Free Trial]
|
|
253
|
+
|
|
254
|
+
Use mega menus for Product (features list), Solutions (use cases + industries), and Resources (blog, guides, templates, webinars, case studies).
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Small Business / Local
|
|
259
|
+
|
|
260
|
+
### Page Hierarchy
|
|
261
|
+
|
|
262
|
+
```
|
|
263
|
+
Homepage (/)
|
|
264
|
+
├── Services (/services)
|
|
265
|
+
│ ├── Service A (/services/service-a)
|
|
266
|
+
│ ├── Service B (/services/service-b)
|
|
267
|
+
│ └── Service C (/services/service-c)
|
|
268
|
+
├── About (/about)
|
|
269
|
+
├── Testimonials (/testimonials)
|
|
270
|
+
├── Blog (/blog)
|
|
271
|
+
│ └── [Posts] (/blog/post-slug)
|
|
272
|
+
├── Contact (/contact)
|
|
273
|
+
├── Privacy (/privacy)
|
|
274
|
+
└── Terms (/terms)
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### URL Map
|
|
278
|
+
|
|
279
|
+
| Page | URL | Nav Location | Priority |
|
|
280
|
+
|------|-----|-------------|----------|
|
|
281
|
+
| Homepage | `/` | Header (logo) | Critical |
|
|
282
|
+
| Services | `/services` | Header | High |
|
|
283
|
+
| Service pages | `/services/{slug}` | Header dropdown | High |
|
|
284
|
+
| About | `/about` | Header | Medium |
|
|
285
|
+
| Testimonials | `/testimonials` | Header | Medium |
|
|
286
|
+
| Blog | `/blog` | Header | Medium |
|
|
287
|
+
| Contact | `/contact` | Header (CTA) | High |
|
|
288
|
+
|
|
289
|
+
### Navigation
|
|
290
|
+
|
|
291
|
+
**Header (5 items + CTA)**: Services | About | Testimonials | Blog | [Contact Us]
|
|
292
|
+
|
|
293
|
+
Keep it simple. Small business sites should be flat (1-2 levels max). Every page should be reachable from the header.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# SEO
|
|
2
|
+
|
|
3
|
+
- **IS:** one entry point for search visibility: evidence-led audits, implementation, demand research, writer briefs, and performance measurement across search engines and AI search (AEO for AI answers inside search, GEO for standalone assistants; see `references/answer-engines.md`).
|
|
4
|
+
- **IS NOT:** writing the article or standalone marketing copy (`ghostwriter`), visual redesign (`ui-design`), tenant infrastructure (`multi-tenant-architecture`), or implementing AFDocs / Is Agentic / Is It Agent Ready scorecards (`agent-ready`). Fix SEO copy and markup when they are part of the requested implementation.
|
|
5
|
+
|
|
6
|
+
## Route the task
|
|
7
|
+
|
|
8
|
+
| Request | Load | Deliverable |
|
|
9
|
+
|---|---|---|
|
|
10
|
+
| Audit a site, diagnose indexing, review a migration | `references/audit.md` and `references/validation-evidence.md` | Prioritized findings with URLs, observed evidence, impact, and correction |
|
|
11
|
+
| Fix or implement SEO | Audit references, then applicable implementation references below | Code changes, scoped checks, and served-page evidence for the changed behavior |
|
|
12
|
+
| Research demand, choose a target, brief a page | `references/research-protocol.md`; `references/brief-template.md` for a brief | Sourced demand table and decision, or a durable writer brief |
|
|
13
|
+
| Explain traffic movement, measure AI visibility, monitor SEO | `references/monitoring.md` | Property-scoped diagnosis or configured monitoring with explicit data gaps |
|
|
14
|
+
|
|
15
|
+
For a combined request, reuse one property and URL inventory across modes. An audit request produces findings; a request to fix them proceeds through implementation and verification within the user's authorized scope. A research-only request does not require crawling every URL or changing code.
|
|
16
|
+
|
|
17
|
+
## Establish the evidence boundary
|
|
18
|
+
|
|
19
|
+
Identify the exact public host, URL-prefix or domain property, production environment, project/subpath, audience, and business outcome. On a shared domain, filter each project's path separately. In analytics, verify hostname, path, conversion event and attribution window before interpreting a number.
|
|
20
|
+
|
|
21
|
+
Discover connected tools and existing project bindings first. Prefer the established reporting source, then an available equivalent, then a signed-in browser. No vendor is required. Ownership verification, API consent and a successful scoped query are separate states. An export for a neighboring property is not a fallback.
|
|
22
|
+
|
|
23
|
+
Use `No data` with its reason for inaccessible, missing, unsupported or unmeasured metrics; distinguish these from a measured zero. Label historical exports by their actual dates. Do useful public checks while an authenticated metric is unavailable.
|
|
24
|
+
|
|
25
|
+
## Working sequence
|
|
26
|
+
|
|
27
|
+
For substantial mixed work, track only the applicable steps:
|
|
28
|
+
|
|
29
|
+
- [ ] Confirm property, scope, baseline and intended outcome.
|
|
30
|
+
- [ ] Inspect live evidence and map affected route patterns or research questions.
|
|
31
|
+
- [ ] Prioritize blocking defects and high-value opportunities; separate observations from hypotheses.
|
|
32
|
+
- [ ] Implement authorized corrections or deliver the requested research/brief.
|
|
33
|
+
- [ ] Recheck the changed behavior, identify the tested environment, and report remaining gaps.
|
|
34
|
+
|
|
35
|
+
Prioritize crawl/index defects before cosmetic metadata changes. Page titles, headings and content structure follow the page's purpose and reader intent. Descriptive non-brand terms help category discovery; brand-led portfolio and product pages can be appropriate. Neither a fixed title character count nor question-shaped headings are ranking requirements.
|
|
36
|
+
|
|
37
|
+
For AI visibility, the owner builds crawl access, content and extractable structure; independent reviews, comparisons and coverage are earned, and they supply most of what answers say about a brand. Fix the owned layers first, then say where the remaining leverage sits instead of padding the site. Original evidence, useful comparisons and honest product limitations earn their place ahead of manufactured keyword permutations. Research likely reader questions; do not present invented query fan-outs as engine telemetry or create a page for every variation.
|
|
38
|
+
|
|
39
|
+
## References
|
|
40
|
+
|
|
41
|
+
| File | Read when |
|
|
42
|
+
|---|---|
|
|
43
|
+
| [references/audit.md](references/audit.md) | Crawling, diagnosing or prioritizing a site audit; canonicals, redirects, exclusions and programmatic pages; hreflang; CDN, response headers or preview environments affecting discovery |
|
|
44
|
+
| [references/nextjs-implementation.md](references/nextjs-implementation.md) | Implementing App Router metadata, sitemaps, rendering, status codes, Markdown twins, or schema; verify APIs against the installed Next.js docs |
|
|
45
|
+
| [references/answer-engines.md](references/answer-engines.md) | SEO, AEO and GEO terms, AI visibility, crawler policies, owned versus earned coverage, Markdown alternatives or `llms.txt` |
|
|
46
|
+
| [references/validation-evidence.md](references/validation-evidence.md) | Verifying findings, a built page or a deployed correction |
|
|
47
|
+
| [references/research-protocol.md](references/research-protocol.md) | Keyword/prompt metrics, opportunity selection and question maps |
|
|
48
|
+
| [references/brief-template.md](references/brief-template.md) | Producing a writer brief |
|
|
49
|
+
| [references/monitoring.md](references/monitoring.md) | Search/AI performance, attribution, anomalies or recurring work |
|
|
50
|
+
| [references/sources.md](references/sources.md) | A claim depends on current engine behavior, supported reports, or vendor research |
|
|
51
|
+
|
|
52
|
+
## Delivery
|
|
53
|
+
|
|
54
|
+
Findings go in chat unless a file is requested. Writer briefs go to the requested project destination; retain prior dated briefs when producing a new revision. Keep scratch crawls and exports out of the repository. No em dashes in authored reports or briefs.
|
|
55
|
+
|
|
56
|
+
Report what changed, why, exact verification evidence, and what remains unmeasured. A successful local build, ready deployment, public URL probe, Google index record and measured conversion are different evidence. Name the strongest state actually verified.
|
|
57
|
+
|
|
58
|
+
Sending recaps to others, scheduling recurring work, spending on tools and production deployment follow the user's authorization and host rules. Reuse an existing matching monitor rather than creating another owner or schedule.
|
|
59
|
+
|
|
60
|
+
## Gotchas
|
|
61
|
+
|
|
62
|
+
- A sitemap can parse while listing `/studio` that intentionally returns 404. Check its URLs, not just XML validity.
|
|
63
|
+
- A canvas gated on mounted state can leave the homepage and category hubs with only navigation in initial HTML. Inspect those hubs as well as deep pages; `use client` alone does not imply missing server-rendered content.
|
|
64
|
+
- `lastModified: new Date()` or a build timestamp describes generation, not necessarily a significant page update. Use content dates or omit the field.
|
|
65
|
+
- A canonical tag on each URL does not resolve two copies that both self-canonicalize. Compare content and choose the preferred URL.
|
|
66
|
+
- Two consistent JSON-LD scripts are not an error. Verify entity identity, eligible properties and visible supporting content instead of script count.
|
|
67
|
+
- DNS verification needs no invented meta token. Confirm scoped data access separately.
|
|
68
|
+
- A crawler user-agent probe does not authenticate a bot IP or establish index inclusion. Treat CDN logs and engine inspection as separate evidence.
|
|
69
|
+
- Prompt demand, measured citations, mentions, AI impressions and referral sessions are different quantities. Preserve engine, source, match type, scope and window.
|
|
70
|
+
- One prompt run, or one score averaged across engines, is not a visibility measurement. Repeat each prompt, report per engine, and keep recall separate from citations.
|
|
71
|
+
- Schema, `llms.txt` and fixed answer-block lengths are not measured citation levers. Keep them for their real consumers; do not sell them as AI visibility.
|
|
72
|
+
- A vendor Search Console connector may under-report. Reconcile property, filters and aggregation against native Search Console before diagnosing a drop.
|
|
73
|
+
|
|
74
|
+
Maintenance only: `evals/evals.json` holds behavioral scenarios and routing prompts. It is loaded when changing the skill, not during ordinary SEO work.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# AI Search: AEO and GEO
|
|
2
|
+
|
|
3
|
+
## Terms
|
|
4
|
+
|
|
5
|
+
The labels are not standardized. Vendors use AEO, GEO, LLMO and "AI SEO" interchangeably, and Perplexity calls itself an answer engine. Map whatever term the user uses to a named list of engines before doing anything, and use these meanings in reports:
|
|
6
|
+
|
|
7
|
+
| Term | Means here | Engines | Where visibility comes from | Native measurement |
|
|
8
|
+
|---|---|---|---|---|
|
|
9
|
+
| SEO | Search engine optimization. Crawl, index, rank and click in a search engine; in this skill, also the umbrella for every surface people search on | Google Search, Bing | The engine's own index | Search Console, Bing Webmaster Tools |
|
|
10
|
+
| AEO | Answer engine optimization. Being the answer or a cited source in AI answers shown inside a search engine; older usage also covers featured snippets and voice answers | Google AI Overviews and AI Mode, Bing Copilot answers | The same search index as SEO, so SEO foundations carry over | Search Console generative AI report, Bing AI Performance |
|
|
11
|
+
| GEO | Generative engine optimization. Being mentioned and cited when a standalone assistant writes an answer from retrieved sources. The term comes from Aggarwal et al., "GEO: Generative Engine Optimization", KDD 2024 (arXiv 2311.09735), tested on Perplexity | ChatGPT search, Claude, Perplexity, Gemini app | Each vendor's retrieval: its own crawler, a partner index (often Bing) or both; plus what the model recalls from training | None on the site side; repeated prompt panels or a visibility tool (`monitoring.md`) |
|
|
12
|
+
|
|
13
|
+
"AI search" in this skill means AEO and GEO together. "Answer engine" means any engine that composes an answer rather than a list of links.
|
|
14
|
+
|
|
15
|
+
They are not separate disciplines with separate tactics. Both rest on the same work as SEO: crawl access, indexable server-rendered text, extractable claims, consistent entity naming and earned third-party coverage. What differs per engine is the crawler to allow, the index it retrieves from, and the report that measures it. Do not sell AEO and GEO as two retainers, and do not report one blended "AI visibility" score across them.
|
|
16
|
+
|
|
17
|
+
## Surfaces
|
|
18
|
+
|
|
19
|
+
AI discovery has several surfaces: search retrieval, model training, user-triggered fetching and browser agents. Identify which one the request concerns before changing access or interpreting a metric. Training recall (what a model says without searching) is not retrieval and has no crawler or report to fix; measure it separately.
|
|
20
|
+
|
|
21
|
+
## Access policy
|
|
22
|
+
|
|
23
|
+
| Purpose | Examples | Decision |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| Search retrieval | OAI-SearchBot, Claude-SearchBot, PerplexityBot, Googlebot, Bingbot | Permit discovery where the owner wants search visibility; verify current vendor rules and published IP ranges |
|
|
26
|
+
| User-triggered fetching | ChatGPT-User, Claude-User, Perplexity-User | May have different robots behavior; check current vendor documentation rather than assuming search-bot semantics |
|
|
27
|
+
| Training | GPTBot, ClaudeBot, CCBot | Preserve the owner's training decision independently of search access |
|
|
28
|
+
| Usage controls | Google-Extended, Applebot-Extended | Consult current vendor scope; these are not separate HTTP crawlers |
|
|
29
|
+
|
|
30
|
+
OpenAI explicitly separates OAI-SearchBot search access from GPTBot training permission. Do not claim that allowing training earns citations or that blocking training removes ChatGPT search visibility. Avoid generalizing one vendor's controls to all engines.
|
|
31
|
+
|
|
32
|
+
Inspect the served robots file and applicable group selection. A specifically named user-agent group can supersede wildcard rules, so carry forward intended private-path exclusions. Check origin, CDN/WAF challenges and published verified-bot rules separately. Spoofing a user-agent string tests a response path; it does not establish real crawler identity or successful bot access from vendor IPs.
|
|
33
|
+
|
|
34
|
+
Google's AI search uses ordinary search foundations. Verify current Search Console inclusion settings and snippet controls against official documentation before advising an opt-out; do not hard-code a claim that one robots directive is the only control forever.
|
|
35
|
+
|
|
36
|
+
## Content and distribution
|
|
37
|
+
|
|
38
|
+
Make substantive text and links available in the served page. Summaries and question headings are useful when they help readers, not required AI markup. Answer real evaluator questions, show evidence and limitations, and keep public product facts consistent across the site and documentation.
|
|
39
|
+
|
|
40
|
+
The on-page test is extraction: can a specific, quotable claim be lifted from the page without its context collapsing? A direct answer near the relevant heading usually passes; a word-count band or readability score is house style, not an engine requirement. Name products, plans and entities the same way everywhere and spell out an ambiguous acronym on first use, because inconsistent naming splits the entity. Original data benchmarked against a field is quotable; a lone proprietary figure is not.
|
|
41
|
+
|
|
42
|
+
Prefer updating the existing page over publishing a new one on the same question. Change the visible and structured dates only when the substance changes; a maintained comparison or guide keeps earning citations, while a dated announcement drops out.
|
|
43
|
+
|
|
44
|
+
## Owned and earned layers
|
|
45
|
+
|
|
46
|
+
Split the work before prioritizing it. The owner can build crawl access, indexable content and extractable structure (readable). Independent coverage, named authors with a verifiable record, original evidence and a history of being right are conferred by others (citable). Most brand descriptions in AI answers come from third-party pages, predominantly reviews, comparisons and round-ups, so owned-site fixes are necessary and have a ceiling. Say so when an audit finds the owned layers healthy rather than inventing further on-page work.
|
|
47
|
+
|
|
48
|
+
Diagnose the category before recommending distribution. Run the buyer's real questions in each relevant engine and classify the cited sources (owned page, review site, forum, publisher, marketplace, retailer, competitor). The mix differs by category and engine; the dominant source type decides whether the next move is an owned page, review velocity, publisher outreach or marketplace presence.
|
|
49
|
+
|
|
50
|
+
Seek useful independent reviews, demonstrations, research and community contributions when they fit the audience. Do not prescribe fabricated mentions, seeded thin listicles, scaled AI-generated pages, or a quota of backlinks or videos. Correlation studies are dated hypotheses with selection criteria, not causal recipes or promised visibility gains. Identify engine, sample and outcome before applying a study to a small project, and discount research sold by the vendor of the recommended fix.
|
|
51
|
+
|
|
52
|
+
## Optional machine-readable surfaces
|
|
53
|
+
|
|
54
|
+
`llms.txt` and Markdown alternatives can help tools that use them. They are not Google ranking requirements or evidence of citations. Add them for a real consumer and keep them aligned with the visible source rather than duplicating a second content system. A Markdown twin carries the same words and facts as the HTML; content served only to bots is cloaking under Google's spam policies. Schema is likewise for rich-result eligibility and entity identity, not a citation lever. Mintlify Agent Score, AFDocs, and Is Agentic scorecards belong to `agent-ready`; this file is crawler policy, canonicals, and how Next.js should cache the twin.
|
|
55
|
+
|
|
56
|
+
Prefer an explicit Markdown URL when content negotiation adds unnecessary cache complexity. If negotiation is required, honor Accept quality values, including `q=0`, preserve required Vary fields on both representations, and verify actual CDN behavior in both request orders. Next may replace Vary on framework-generated HTML; do not claim cache safety from a header set only on the Markdown response. Keep canonical and indexing policy intentional for alternate URLs.
|
|
57
|
+
|
|
58
|
+
Measure native AI visibility and referral/conversion outcomes using `monitoring.md`. A successful fetch, an `llms.txt` file or an agent-friendly demo does not establish that an engine cited the site.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Audit
|
|
2
|
+
|
|
3
|
+
Start with the actual property and public host. Record the environment, URL sample and coverage so a sitemap crawl is not described as a complete index audit.
|
|
4
|
+
|
|
5
|
+
## Triage
|
|
6
|
+
|
|
7
|
+
| Area | Inspect | Avoid false positives |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| Discovery and access | robots groups, sitemap indexes and children, response statuses, CDN challenges, internal links | robots permission is not proof of successful crawling; footer links are crawlable, though contextual links improve discovery and meaning |
|
|
10
|
+
| Index intent | meta/header noindex, canonical destination, duplicate bodies, redirects, missing paths | self-canonicals do not consolidate duplicates; sitemap inclusion is not index inclusion |
|
|
11
|
+
| Rendering | initial HTML versus rendered DOM, main content, headings, anchors, mobile parity | `use client` can still prerender; a JavaScript-dependent page is not automatically absent from Google |
|
|
12
|
+
| Metadata and entities | meaningful titles/descriptions, canonical, social images, JSON-LD consistency and eligibility | no fixed title length or one-script rule; valid JSON is not rich-result eligibility |
|
|
13
|
+
| Experience | field LCP, INP, CLS where available; lab diagnostics and interactions | lab scores cannot substitute for missing field data; low word count alone is not a defect in a functional tool |
|
|
14
|
+
| Content and demand | reader intent, original evidence, comparison accuracy, overlapping pages, conversion path | do not infer demand from a keyword in a title or invent product facts |
|
|
15
|
+
| AI search (AEO, GEO) | crawler groups, retrieval snippet test, extractable claims, consistent entity naming, content freshness, third-party coverage of the category | owned-site readiness does not establish citations; `llms.txt`, schema and answer-block length are not citation requirements |
|
|
16
|
+
| Measurement | native search reports, engine-specific AI reporting, qualified conversions | search impressions, prompt volume, citations and sessions are not interchangeable |
|
|
17
|
+
|
|
18
|
+
## Crawl scope
|
|
19
|
+
|
|
20
|
+
Follow sitemap indexes recursively, deduplicate URL entries and preserve which sitemap advertised each URL. Fetch listed destinations with bounded concurrency. Sample every route pattern, host/proxy boundary and locale; expand when a defect affects a pattern. Crawl navigational links as needed to find non-sitemap URLs and compare against the intended route inventory for orphans.
|
|
21
|
+
|
|
22
|
+
Record requested and final URL, redirect chain, status, MIME type, robots directives, canonical, title, main content and structured-data parse results. Collect HTML metadata from HTML elements, not SVG `title` elements or escaped React payload strings. Inspect actual anchors for discovery, not only strings in JavaScript.
|
|
23
|
+
|
|
24
|
+
Prioritize systemic exclusions, wrong canonicals and broken destinations before lower-impact duplication. Unknown paths should return genuine missing-page behavior. Check both initial HTML and the rendered page before attributing missing content to rendering.
|
|
25
|
+
|
|
26
|
+
## Findings contract
|
|
27
|
+
|
|
28
|
+
Each material finding names the affected URL/pattern, observation, evidence, impact, correction and verification method. Mark inference and missing evidence explicitly. Separate existing baseline failures from regressions introduced by the fix. A checked item can be pass, fail, not applicable or not measured, with the reason.
|
|
29
|
+
|
|
30
|
+
Prioritization follows business impact, affected scope, confidence and correction cost. Avoid fake numerical precision, fixed finding quotas and reports padded with irrelevant checks. For a healthy site, say which checks passed and which performance questions remain unanswered.
|
|
31
|
+
|
|
32
|
+
Separate verified defects, optional enhancements and unmeasured state. An owner requesting a crawler policy does not establish the current robots rules; inspect them before claiming they are missing or permissive. Recommend an optional annotation only when the observed site needs its behavior.
|
|
33
|
+
|
|
34
|
+
## Indexing policy
|
|
35
|
+
|
|
36
|
+
For changed route patterns, record index intent, preferred URL and reason. Expand to per-URL rows where exceptions matter.
|
|
37
|
+
|
|
38
|
+
- Index useful public pages that satisfy distinct reader needs. A sitemap should advertise preferred, available URLs intended for search, including eligible non-HTML resources where appropriate.
|
|
39
|
+
- For equivalent public URLs, select a canonical and align internal links and sitemaps. Redirect an obsolete copy when it no longer needs to remain accessible. Canonicals are signals, not guaranteed engine choices.
|
|
40
|
+
- Keep locale equivalents self-canonical and connect them with hreflang instead of canonicalizing every language to English.
|
|
41
|
+
- For previews, private utilities and deliberate exclusions, use appropriate access control and/or crawlable `noindex`. Robots blocking alone does not reliably remove a URL from results. Do not combine conflicting exclusion/consolidation signals as a default duplicate strategy.
|
|
42
|
+
- Return 404 or 410 for permanently missing content, 503 for temporary unavailability, and a real server redirect for moved content. Do not funnel unrelated deleted pages to the homepage.
|
|
43
|
+
- Do not list unavailable studio, login or app-shell routes merely because they exist in source. Share the availability decision with the sitemap generator.
|
|
44
|
+
- `lastmod` reflects significant content, structured-data or link changes. Build/request time is not a substitute; omit an unknown date. Check current sitemap limits before partitioning large inventories.
|
|
45
|
+
|
|
46
|
+
### Programmatic pages
|
|
47
|
+
|
|
48
|
+
Validate demand, product fit and a distinct useful result before indexing a new pattern. Reuse, merge or improve an existing page when it already serves the intent. Original data, meaningful local differences, worked examples and genuine comparisons can justify separate pages; swapping a location or adjective alone does not.
|
|
49
|
+
|
|
50
|
+
Define the indexability gate and lifecycle for empty results, out-of-stock resources and retired entities. Do not generate fan-out permutations primarily to manipulate search or AI answers. See the current spam policy in `sources.md` when a proposed pattern approaches scaled content abuse.
|
|
51
|
+
|
|
52
|
+
## Internationalisation
|
|
53
|
+
|
|
54
|
+
Use hreflang for equivalent language or regional pages, not unrelated content that happens to target different countries.
|
|
55
|
+
|
|
56
|
+
- Use supported language codes with optional region codes and fully qualified URLs. A region by itself is invalid.
|
|
57
|
+
- Include self-reference and reciprocal links among the variants being declared. Missing reciprocity affects those annotations; it does not necessarily invalidate every correctly reciprocal subset on the site.
|
|
58
|
+
- Keep translated pages self-canonical unless they truly duplicate another preferred URL. Do not canonicalize all languages to the source-language page.
|
|
59
|
+
- `x-default` is optional. Its absence alone is neither a defect nor a reason to add it. Recommend it when an actual selector or unmatched-locale destination needs declaring.
|
|
60
|
+
- HTML, HTTP headers and XML sitemaps are equivalent implementation methods. Prefer one maintainable source; using more than one is allowed, but keep them consistent.
|
|
61
|
+
- Translate meaningful titles, descriptions, headings, alt text and user-facing schema values. Preserve the identity of shared organizations and people.
|
|
62
|
+
- Keep locale URLs independently accessible. Avoid mandatory IP/language redirects that prevent a reader or crawler from reaching another language.
|
|
63
|
+
|
|
64
|
+
Validate representative reciprocal pairs and an unmatched-language visit. Record missing annotations and canonical conflicts precisely rather than reporting the whole set as broken. Check Google's current localized-version documentation in `sources.md` for supported codes and exceptions.
|
|
65
|
+
|
|
66
|
+
## Delivery and access
|
|
67
|
+
|
|
68
|
+
Load this when response handling interferes with discovery. Security/privacy work unrelated to the SEO defect belongs to the relevant project workflow.
|
|
69
|
+
|
|
70
|
+
- Check both the public proxy host and origin where permitted. Correct source code can still serve an auth page, WAF challenge or cached error at the public URL.
|
|
71
|
+
- Verify robots directives in HTML and HTTP headers, including CDN-added fields. Preview deployments on custom domains need an explicit indexing policy; do not assume the platform adds noindex on every hostname.
|
|
72
|
+
- Use 503 plus an appropriate Retry-After for temporary unavailability. A long outage can still affect search visibility; the header does not guarantee retention.
|
|
73
|
+
- Distinguish browser-enforced CSP/CORP/CORS restrictions from server-to-server fetches. Verify the failing consumer and actual resource response before weakening headers.
|
|
74
|
+
- Check static files, redirects and generated metadata under the deployed basePath. Inspect image MIME type and actual content rather than trusting a 200 response.
|
|
75
|
+
- For robots changes, verify group precedence and private-route exclusions. Do not disable the WAF globally to accommodate a crawler; use verified identity and the narrow affected rule.
|
|
76
|
+
- Do not write real credentials, verification tokens or private analytics exports into public artifacts. Preserve existing ownership verification and request the required scoped access through the host's supported authentication flow.
|
|
77
|
+
|
|
78
|
+
Legal consent and retention requirements vary by property and jurisdiction. Do not turn a generic SEO checklist into a blanket legal compliance assertion or change consent settings to improve measured conversions.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Writer Brief
|
|
2
|
+
|
|
3
|
+
Adapt this shape to the requested page. Keep the decisions and evidence; omit irrelevant sections rather than manufacturing content to fill them. This is a brief, not the article.
|
|
4
|
+
|
|
5
|
+
A target keyword is not a product claim. Identify our product separately from the competitor named in the keyword. If our product is unnamed, use `<product>` rather than inventing a competitor edition or download. A brief for "Things 3 for Windows" can answer the platform question and evaluate our Windows-capable alternative; it must not claim that Things has a Windows version. Mark missing comparison facts for verification while completing the brief.
|
|
6
|
+
|
|
7
|
+
```markdown
|
|
8
|
+
# Brief: <reader's topic or decision>
|
|
9
|
+
|
|
10
|
+
Date: <YYYY-MM-DD>
|
|
11
|
+
|
|
12
|
+
## Why this page
|
|
13
|
+
|
|
14
|
+
Audience and intent: <who and what they need>
|
|
15
|
+
Decision: <create, update, consolidate or validate; why>
|
|
16
|
+
Distinct value: <original evidence, useful comparison or experience>
|
|
17
|
+
Gap evidence: <for create: who the current results and answers cite, and the two or three things they miss, with the date read; for update: the decay or ranking evidence>
|
|
18
|
+
Existing coverage: <page to improve or overlap to avoid>
|
|
19
|
+
Desired outcome: <reader action and measurable product outcome>
|
|
20
|
+
|
|
21
|
+
## Search decisions
|
|
22
|
+
|
|
23
|
+
Primary query: <intent-led, modifier only if useful>
|
|
24
|
+
Secondary terms and evaluator questions: <relevant supporting demand>
|
|
25
|
+
Title and H1 direction: <accurate page purpose; non-brand discovery terms where appropriate>
|
|
26
|
+
Description: <specific value and accurate limits>
|
|
27
|
+
Canonical: <preferred URL>
|
|
28
|
+
|
|
29
|
+
<Research evidence table: metric, source, match definition, scope/engine, window, pull date; No data with reason for gaps.>
|
|
30
|
+
|
|
31
|
+
## Editorial direction
|
|
32
|
+
|
|
33
|
+
North star: <what the reader should understand or decide>
|
|
34
|
+
Ideas to land: <only the substantive ideas needed>
|
|
35
|
+
Proof and limitations: <what the writer must demonstrate and qualify>
|
|
36
|
+
Questions worth answering: <natural questions with their source (support, forum, review, Search Console query); note existing coverage>
|
|
37
|
+
|
|
38
|
+
## Sources and validation
|
|
39
|
+
|
|
40
|
+
Public sources: <URLs the writer can actually cite>
|
|
41
|
+
Facts to verify: <product behavior, comparisons, dates, research limitations>
|
|
42
|
+
Success measurement: <outcome, baseline/window or No data, next check>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Use public product pages, docs and original research for citeable claims. Do not transfer private feature dumps, roadmap promises or internal wiki links into public copy. No invented statistics, quotes or functionality. Leave narrative order and section breaks to the writer unless the user requests an outline.
|
|
46
|
+
|
|
47
|
+
Save a requested brief at the project/user destination. For a new dated revision, preserve the earlier brief and explain what changed; follow an explicit request to edit an existing document in place.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Measurement and Monitoring
|
|
2
|
+
|
|
3
|
+
Bind each metric to the actual property, hostname and project path. Verify native report access, analytics filters and conversion-event meaning before interpreting a trend.
|
|
4
|
+
|
|
5
|
+
## Separate the measurements
|
|
6
|
+
|
|
7
|
+
| Question | Evidence | Limit |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| Are pages indexed and receiving search traffic? | Native Google/Bing indexing and performance reports | Ownership verification or sitemap submission alone proves neither |
|
|
10
|
+
| Is the site visible in Google's generative AI features? | Search Console generative AI performance, including available impression/page/country/device/date dimensions | Verify current report access and supported dimensions; do not invent AI-specific clicks or CTR from impression-only data. Read it as presence, not position: an AI answer is not a ranked list, so average position and CTR there do not mean what they mean for links |
|
|
11
|
+
| Is Bing/Copilot citing it? | Bing Webmaster AI Performance, available citations, cited pages and grounding-query/topic dimensions | Needs Bing Webmaster verification first, otherwise `No data`; availability and sampling vary; citation counts are not ranking positions or referral visits |
|
|
12
|
+
| Is a tracked prompt producing mentions/citations? | Repeated, documented engine-specific prompt panel or connected visibility tool | Preserve prompts, engine/model, search mode, locale, date, repetitions, sample size and citation URL; a panel is not population-wide demand. Report a rate per engine, never one blended score or a ranking position |
|
|
13
|
+
| How often do people ask the topic? | Vendor Exact prompt demand metric | Demand is not the site's share of visibility |
|
|
14
|
+
| Is AI influence arriving without a referral? | Branded search impressions, direct sessions in the campaign window, and a self-reported "how did you hear" answer | Leading indicators, not proof of AI attribution; keep each as its own series |
|
|
15
|
+
| Does discovery produce useful outcomes? | Analytics landing sessions, qualified visits, signups, activation or revenue | Preserve attribution definitions and windows; missing/referrer-stripped visits prevent complete AI attribution |
|
|
16
|
+
| Do the agent-readable surfaces answer? | Scanner scorecards and `agent-ready`'s `check-surfaces.sh` output | Says whether `llms.txt`, markdown twins and headers work, not whether any engine cites them; agent readership itself needs server logs, and without a log drain it is `No data` |
|
|
17
|
+
|
|
18
|
+
Inspect current native capabilities using `sources.md`, not a frozen vendor checklist. Google generative AI reports may expose different dimensions for Search and Discover. Where a connector omits a native report, use an available browser/export or report that gap rather than silently substituting overall search data.
|
|
19
|
+
|
|
20
|
+
## Prompt panels
|
|
21
|
+
|
|
22
|
+
A single prompt run is a sample of one: answers and cited sources change between identical runs and from week to week. Treat each prompt as a survey question.
|
|
23
|
+
|
|
24
|
+
- Run each prompt several times (three to five) in clean sessions and report mention and citation rates with the run count, not a point estimate.
|
|
25
|
+
- Keep each engine, and Google AI Overviews versus AI Mode, on its own line; engines retrieve from different indexes and cite different source types.
|
|
26
|
+
- Use real buyer questions with the persona and use case, plus at least one follow-up turn where alternatives or price are asked.
|
|
27
|
+
- Store the raw answer with cited URLs, engine, model, mode, locale, timestamp and collection method. Never mix collection methods (API, SERP provider, browser) in one trend line, and never infer a citation without a URL.
|
|
28
|
+
- Classify cited sources by type (see `answer-engines.md`) and record the attributes the answer associates with the brand; those are what content can change.
|
|
29
|
+
- Record recall without retrieval separately from citations. They measure different things and are never summed.
|
|
30
|
+
|
|
31
|
+
Third-party rank and AI-visibility tools that scrape results can lose collection without notice. Check the vendor's collection status before trending its data, and prefer native reports.
|
|
32
|
+
|
|
33
|
+
## Diagnose a change
|
|
34
|
+
|
|
35
|
+
Use complete, comparable windows with matching filters, data freshness and aggregation. Check reporting lag, weekdays/seasonality, campaigns, releases, migrations and tracking changes before attributing movement to ranking. Segment by brand/non-brand, page group, country, device and search appearance where supported and relevant. Do not average positions across incompatible populations.
|
|
36
|
+
|
|
37
|
+
Report absolute counts alongside percentage changes. Moving from 5 clicks to 4 is a one-click change, not sufficient evidence of a material incident by itself. Set alert thresholds from baseline volume, normal variance, persistence and business impact; no universal 20% threshold. For sparse data, extend the observation window or report uncertainty rather than inventing significance.
|
|
38
|
+
|
|
39
|
+
Distinguish loss of visibility, lower click-through, fewer sessions and weaker activation. Verify conversion instrumentation before concluding that SEO traffic quality changed. If authentic scope or outcome data is absent, mark it `No data` and name the smallest next check.
|
|
40
|
+
|
|
41
|
+
## Decay and refresh queue
|
|
42
|
+
|
|
43
|
+
Refreshing a page that already ranks usually moves faster than publishing a new one, so review a page-level decay list on the same comparable windows before choosing new work. For each page, compare clicks, impressions, average position and CTR across two complete windows of equal length, and list the pages that lost clicks with the absolute counts beside the change.
|
|
44
|
+
|
|
45
|
+
Set the entry bar from the property's own volume: a minimum impression count for the current window, and triggers the project has written down (a traffic fall, a position loss, a CTR fall at a steady position, or a material product or source change). Where the project has no written triggers, derive them from normal variance and say so. Before opening a refresh, rule out a redirect or slug change inside either window, a launch, seasonality and brand-query movement. Refresh the stale answer, source, screenshot or step; do not restamp the date for a cosmetic edit.
|
|
46
|
+
|
|
47
|
+
## Recurring checks
|
|
48
|
+
|
|
49
|
+
Use an existing matching owner/schedule when recurring work is authorized. A proposed cadence is not a configured monitor. Preserve the configured destination and notification preferences; do not send an unapproved recap elsewhere.
|
|
50
|
+
|
|
51
|
+
- Anomaly checks report new, material changes supported by the baseline, plus actionable access or delivery failures.
|
|
52
|
+
- Digests summarize completed comparable periods, leading page/query movements, engine-specific AI visibility, conversion outcomes and the next decision.
|
|
53
|
+
- Deduplicate previously reported incidents. An unchanged refresh does not need another notification.
|
|
54
|
+
- Repeated authentication failures should be surfaced through the host's supported reauthentication flow rather than retried indefinitely.
|
|
55
|
+
|
|
56
|
+
Keep monitoring reads separate from mutations. Store durable reports and alert state in the mapped project system, not inside the installed skill folder.
|