@hanzlaa/rcode 4.3.3 → 4.4.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/CONTRIBUTING.md +1 -1
- package/README.md +10 -4
- package/cli/doctor.js +21 -3
- package/cli/index.js +5 -1
- package/cli/install.js +2 -2
- package/cli/postinstall.js +1 -1
- package/cli/uninstall.js +48 -6
- package/dist/rcode.js +174 -170
- package/package.json +12 -22
- package/rcode/agents/rcode-codebase-mapper.md +12 -0
- package/rcode/agents/rcode-phase-researcher.md +13 -0
- package/rcode/agents/rcode-project-researcher.md +32 -0
- package/rcode/agents/rcode-roadmapper.md +15 -0
- package/rcode/agents/rules/planner/common-patterns.md +40 -0
- package/rcode/bin/lib/roadmap.cjs +184 -11
- package/rcode/bin/rcode-hooks.cjs +102 -151
- package/rcode/bin/rcode-tools.cjs +669 -55
- package/rcode/data/intent-table.json +87 -0
- package/rcode/modules/seo.yaml +22 -0
- package/rcode/references/project-types.yaml +75 -0
- package/rcode/skills/SKILLS_INDEX.md +17 -0
- package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/SKILL.md +4 -21
- package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/templates/heartbeat.sh +0 -0
- package/rcode/skills/actions/4-implementation/rcode-scaffold-project/SKILL.md +60 -1
- package/rcode/skills/core/rcode-init/scripts/__pycache__/rcode_init.cpython-38.pyc +0 -0
- package/rcode/skills/core/rcode-init/scripts/tests/__pycache__/test_rcode_init.cpython-38.pyc +0 -0
- package/rcode/skills/seo/module.yaml +20 -0
- package/rcode/skills/seo/on-page-seo-auditor/SKILL.md +308 -0
- package/rcode/skills/seo/on-page-seo-auditor/references/audit-example.md +109 -0
- package/rcode/skills/seo/on-page-seo-auditor/references/audit-templates.md +427 -0
- package/rcode/skills/seo/on-page-seo-auditor/references/bulk-audit-playbook.md +116 -0
- package/rcode/skills/seo/on-page-seo-auditor/references/scoring-rubric.md +525 -0
- package/rcode/skills/seo/rank-and-rent-local-seo/SKILL.md +94 -0
- package/rcode/skills/seo/rank-and-rent-local-seo/rules/city-matrix-and-pages.md +76 -0
- package/rcode/skills/seo/rank-and-rent-local-seo/rules/monetization.md +70 -0
- package/rcode/skills/seo/rank-and-rent-local-seo/rules/niche-selection.md +60 -0
- package/rcode/skills/seo/rank-and-rent-local-seo/rules/subniche-discovery.md +66 -0
- package/rcode/skills/seo/rank-and-rent-local-seo/templates/service-city-page.md +36 -0
- package/rcode/skills/seo/rank-and-rent-local-seo/templates/subniche-research-prompt.md +34 -0
- package/rcode/skills/seo/seo-audit/SKILL.md +412 -0
- package/rcode/skills/seo/seo-audit/evals/evals.json +136 -0
- package/rcode/skills/seo/seo-audit/references/ai-writing-detection.md +200 -0
- package/rcode/skills/seo/seo-content-factory/SKILL.md +130 -0
- package/rcode/skills/seo/seo-content-factory/rules/agents.md +80 -0
- package/rcode/skills/seo/seo-content-factory/rules/herdr-wave-mapping.md +80 -0
- package/rcode/skills/seo/seo-content-factory/rules/pipeline.md +102 -0
- package/rcode/skills/seo/seo-content-factory/rules/programmatic-pages.md +107 -0
- package/rcode/skills/seo/seo-content-factory/rules/quality-gates.md +68 -0
- package/rcode/skills/seo/seo-content-factory/rules/weekly-cadence.md +61 -0
- package/rcode/skills/seo/seo-content-factory/templates/BACKLOG.md +23 -0
- package/rcode/skills/seo/seo-content-factory/templates/agent-prompts/01-funnel-A1-A4.md +63 -0
- package/rcode/skills/seo/seo-content-factory/templates/agent-prompts/02-fanout-editorial-A5-A6-A8.md +28 -0
- package/rcode/skills/seo/seo-content-factory/templates/agent-prompts/03-fanout-programmatic-A7-A6-A8.md +25 -0
- package/rcode/skills/seo/seo-content-factory/templates/agent-prompts/04-loop-A9-A10.md +34 -0
- package/rcode/skills/seo/seo-content-factory/templates/article.mdx +39 -0
- package/rcode/skills/seo/seo-content-factory/templates/cluster.schema.json +52 -0
- package/rcode/skills/seo/seo-content-factory/templates/content-brief.md +51 -0
- package/rcode/skills/seo/seo-content-factory/templates/jsonld-builders.ts +49 -0
- package/rcode/skills/seo/seo-content-factory/templates/keywords.csv +13 -0
- package/rcode/skills/seo/seo-content-factory/templates/programmatic-page.tsx +58 -0
- package/rcode/skills/seo/seo-content-writer/SKILL.md +263 -0
- package/rcode/skills/seo/seo-content-writer/references/content-structure-templates.md +875 -0
- package/rcode/skills/seo/seo-content-writer/references/instructions-detail.md +239 -0
- package/rcode/skills/seo/seo-content-writer/references/seo-writing-checklist.md +250 -0
- package/rcode/skills/seo/seo-content-writer/references/title-formulas.md +339 -0
- package/rcode/skills/seo/seo-growth-orchestrator/SKILL.md +79 -0
- package/rcode/skills/seo/seo-growth-orchestrator/rules/backlinks.md +29 -0
- package/rcode/skills/seo/seo-growth-orchestrator/rules/content-engine.md +27 -0
- package/rcode/skills/seo/seo-growth-orchestrator/rules/dos-and-donts.md +40 -0
- package/rcode/skills/seo/seo-growth-orchestrator/rules/goals-protocol.md +34 -0
- package/rcode/skills/seo/seo-growth-orchestrator/rules/local-seo-stack.md +35 -0
- package/rcode/skills/seo/seo-growth-orchestrator/rules/mrr-sprint.md +27 -0
- package/rcode/skills/seo/seo-growth-orchestrator/rules/tools.md +19 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/backlink-research.md +29 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/goal-protocol.md +35 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/local-citations.md +24 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/local-city-pages.md +27 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/local-gbp-categories.md +23 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/local-gsc-goldmine.md +27 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/local-review-mining.md +26 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/mrr-30day-plan.md +19 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/mrr-cut.md +13 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/mrr-opportunity-finder.md +17 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/mrr-role-model.md +18 -0
- package/rcode/skills/seo/seo-site-builder/SKILL.md +149 -0
- package/rcode/skills/seo/seo-site-builder/rules/01-niche-discovery.md +64 -0
- package/rcode/skills/seo/seo-site-builder/rules/02-deep-research.md +164 -0
- package/rcode/skills/seo/seo-site-builder/rules/03-keyword-strategy.md +82 -0
- package/rcode/skills/seo/seo-site-builder/rules/04-content-plan.md +173 -0
- package/rcode/skills/seo/seo-site-builder/rules/05-site-build.md +187 -0
- package/rcode/skills/seo/seo-site-builder/rules/06-yolo.md +127 -0
- package/rcode/skills/seo/seo-site-builder/templates/article-stub.mdx +62 -0
- package/rcode/skills/seo/seo-site-builder/templates/image-prompt.md +97 -0
- package/rcode/skills/seo/seo-site-builder/templates/keyword-export.md +45 -0
- package/rcode/skills/seo/seo-site-builder/templates/niche-scorecard.md +28 -0
- package/rcode/skills/seo/technical-seo-checker/SKILL.md +329 -0
- package/rcode/skills/seo/technical-seo-checker/references/bulk-audit-playbook.md +118 -0
- package/rcode/skills/seo/technical-seo-checker/references/ecommerce-platform-patterns.md +166 -0
- package/rcode/skills/seo/technical-seo-checker/references/http-status-codes.md +705 -0
- package/rcode/skills/seo/technical-seo-checker/references/llm-crawler-handling.md +257 -0
- package/rcode/skills/seo/technical-seo-checker/references/pre-migration-playbook.md +137 -0
- package/rcode/skills/seo/technical-seo-checker/references/robots-txt-reference.md +717 -0
- package/rcode/skills/seo/technical-seo-checker/references/technical-audit-example.md +169 -0
- package/rcode/skills/seo/technical-seo-checker/references/technical-audit-templates.md +436 -0
- package/rcode/templates/settings-hooks.json +4 -0
- package/rcode/workflows/do.md +16 -0
- package/rcode/workflows/execute-sprint.md +22 -0
- package/rcode/workflows/execute.md +17 -3
- package/rcode/workflows/new-milestone.md +21 -9
- package/rcode/workflows/new-project-create-roadmap.md +2 -0
- package/rcode/workflows/new-project-roadmap.md +2 -0
- package/rcode/workflows/new-project.md +3 -0
- package/rcode/workflows/plan.md +15 -2
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
# LLM Crawler Handling (GPTBot / ClaudeBot / PerplexityBot / etc.)
|
|
2
|
+
|
|
3
|
+
Referenced from [SKILL.md](https://github.com/aaron-he-zhu/seo-geo-claude-skills/blob/main/optimize/technical-seo-checker/SKILL.md). Use during technical audits to decide whether (and how) to allow AI-engine crawlers. As of 2026, this is a required technical-SEO decision, not an optional one.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Why this matters
|
|
8
|
+
|
|
9
|
+
AI engines (ChatGPT Search, Claude Search, Perplexity, Google AI Overview, Gemini) crawl the web to populate training data AND real-time answer retrieval. Blocking them can:
|
|
10
|
+
|
|
11
|
+
- Prevent citation in AI answers (GEO visibility loss)
|
|
12
|
+
- Reduce brand mentions in AI-generated summaries
|
|
13
|
+
- Lock out traffic from the fastest-growing discovery channel
|
|
14
|
+
|
|
15
|
+
Allowing them can:
|
|
16
|
+
|
|
17
|
+
- Expose content to training without compensation
|
|
18
|
+
- Increase server load
|
|
19
|
+
- Leak competitive content to rivals who scrape via AI
|
|
20
|
+
|
|
21
|
+
**The decision is per-organization.** Common stances:
|
|
22
|
+
|
|
23
|
+
| Stance | Typical choice | Rationale |
|
|
24
|
+
|--------|----------------|-----------|
|
|
25
|
+
| Default-open (marketing-led orgs) | Allow all AI crawlers | GEO visibility > training-data concerns |
|
|
26
|
+
| Default-closed (IP-heavy orgs) | Block all | Proprietary research, legal docs, customer data |
|
|
27
|
+
| Split (most common in 2026) | Allow retrieval bots, block training bots | Best of both — see mapping below |
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Known crawler inventory (2026)
|
|
32
|
+
|
|
33
|
+
### OpenAI
|
|
34
|
+
|
|
35
|
+
| User-Agent | Purpose | Typical robots.txt choice |
|
|
36
|
+
|-----------|---------|---------------------------|
|
|
37
|
+
| `GPTBot` | Training data for future ChatGPT models | Most orgs block |
|
|
38
|
+
| `ChatGPT-User` | Real-time retrieval when ChatGPT answers with browsing | Most orgs allow (loses citation if blocked) |
|
|
39
|
+
| `OAI-SearchBot` | ChatGPT Search (retrieval-focused) | Allow for GEO visibility |
|
|
40
|
+
|
|
41
|
+
### Anthropic
|
|
42
|
+
|
|
43
|
+
| User-Agent | Purpose | Typical choice |
|
|
44
|
+
|-----------|---------|-----------------|
|
|
45
|
+
| `ClaudeBot` / `Claude-Web` | Training data | Most orgs block |
|
|
46
|
+
| `Claude-User` | Real-time fetch when user asks Claude to look up a URL | Allow |
|
|
47
|
+
| `anthropic-ai` (legacy) | Legacy tag; treat as `ClaudeBot` | Block if blocking training |
|
|
48
|
+
|
|
49
|
+
### Google
|
|
50
|
+
|
|
51
|
+
| User-Agent | Purpose | Typical choice |
|
|
52
|
+
|-----------|---------|-----------------|
|
|
53
|
+
| `Googlebot` | Search + AI Overview | Always allow |
|
|
54
|
+
| `Google-Extended` | Opt-out for Bard / Gemini training (does NOT affect Search ranking) | Block if opting out of training only |
|
|
55
|
+
| `GoogleOther` | Internal research / product testing | Allow |
|
|
56
|
+
|
|
57
|
+
### Perplexity
|
|
58
|
+
|
|
59
|
+
| User-Agent | Purpose | Typical choice |
|
|
60
|
+
|-----------|---------|-----------------|
|
|
61
|
+
| `PerplexityBot` | Crawl for retrieval answers | Allow for GEO visibility |
|
|
62
|
+
| `Perplexity-User` | Real-time fetch for user queries | Allow |
|
|
63
|
+
|
|
64
|
+
### Common Crawl (downstream training data for many LLMs)
|
|
65
|
+
|
|
66
|
+
| User-Agent | Purpose | Typical choice |
|
|
67
|
+
|-----------|---------|-----------------|
|
|
68
|
+
| `CCBot` | Feeds Common Crawl dataset used by many LLMs | Blocking here is indirect training opt-out |
|
|
69
|
+
|
|
70
|
+
### Other 2026 notable
|
|
71
|
+
|
|
72
|
+
| User-Agent | Purpose |
|
|
73
|
+
|-----------|---------|
|
|
74
|
+
| `Bytespider` | TikTok / Doubao / ByteDance LLMs |
|
|
75
|
+
| `Applebot-Extended` | Apple Intelligence training opt-out |
|
|
76
|
+
| `cohere-ai` | Cohere training |
|
|
77
|
+
| `Meta-ExternalAgent` | Meta Llama training |
|
|
78
|
+
| `Diffbot` | B2B data scraping (may power enterprise LLMs) |
|
|
79
|
+
| `omgili` | Data broker — often blocked |
|
|
80
|
+
| `DataForSeoBot`, `AhrefsBot`, `SemrushBot` | SEO tool crawlers — allow if you use the tool |
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Recommended robots.txt patterns
|
|
85
|
+
|
|
86
|
+
### Pattern 1 — Default-open (maximize GEO visibility, accept training)
|
|
87
|
+
|
|
88
|
+
```txt
|
|
89
|
+
# Allow all AI engines for both retrieval and training
|
|
90
|
+
User-agent: GPTBot
|
|
91
|
+
Allow: /
|
|
92
|
+
|
|
93
|
+
User-agent: ClaudeBot
|
|
94
|
+
Allow: /
|
|
95
|
+
|
|
96
|
+
User-agent: Google-Extended
|
|
97
|
+
Allow: /
|
|
98
|
+
|
|
99
|
+
User-agent: PerplexityBot
|
|
100
|
+
Allow: /
|
|
101
|
+
|
|
102
|
+
User-agent: Applebot-Extended
|
|
103
|
+
Allow: /
|
|
104
|
+
|
|
105
|
+
User-agent: cohere-ai
|
|
106
|
+
Allow: /
|
|
107
|
+
|
|
108
|
+
# Block only data resellers / scrapers
|
|
109
|
+
User-agent: omgili
|
|
110
|
+
Disallow: /
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Pattern 2 — Default-closed (training opt-out, retrieval in)
|
|
114
|
+
|
|
115
|
+
```txt
|
|
116
|
+
# Allow retrieval bots (needed for GEO visibility)
|
|
117
|
+
User-agent: ChatGPT-User
|
|
118
|
+
Allow: /
|
|
119
|
+
|
|
120
|
+
User-agent: OAI-SearchBot
|
|
121
|
+
Allow: /
|
|
122
|
+
|
|
123
|
+
User-agent: Claude-User
|
|
124
|
+
Allow: /
|
|
125
|
+
|
|
126
|
+
User-agent: PerplexityBot
|
|
127
|
+
Allow: /
|
|
128
|
+
|
|
129
|
+
User-agent: Perplexity-User
|
|
130
|
+
Allow: /
|
|
131
|
+
|
|
132
|
+
User-agent: Googlebot
|
|
133
|
+
Allow: /
|
|
134
|
+
|
|
135
|
+
# Block training bots
|
|
136
|
+
User-agent: GPTBot
|
|
137
|
+
Disallow: /
|
|
138
|
+
|
|
139
|
+
User-agent: ClaudeBot
|
|
140
|
+
Disallow: /
|
|
141
|
+
|
|
142
|
+
User-agent: Google-Extended
|
|
143
|
+
Disallow: /
|
|
144
|
+
|
|
145
|
+
User-agent: Applebot-Extended
|
|
146
|
+
Disallow: /
|
|
147
|
+
|
|
148
|
+
User-agent: cohere-ai
|
|
149
|
+
Disallow: /
|
|
150
|
+
|
|
151
|
+
User-agent: Meta-ExternalAgent
|
|
152
|
+
Disallow: /
|
|
153
|
+
|
|
154
|
+
User-agent: CCBot
|
|
155
|
+
Disallow: /
|
|
156
|
+
|
|
157
|
+
User-agent: Bytespider
|
|
158
|
+
Disallow: /
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Pattern 3 — Section-specific (e.g., allow blog, block pricing)
|
|
162
|
+
|
|
163
|
+
```txt
|
|
164
|
+
User-agent: GPTBot
|
|
165
|
+
Allow: /blog/
|
|
166
|
+
Allow: /guides/
|
|
167
|
+
Disallow: /pricing/
|
|
168
|
+
Disallow: /customers/
|
|
169
|
+
Disallow: /
|
|
170
|
+
# The trailing Disallow: / is the default; Allow: entries above it take precedence
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Legal layer beyond robots.txt
|
|
176
|
+
|
|
177
|
+
Robots.txt alone is **not a legal opt-out** under EU law. For full compliance as content rights holder:
|
|
178
|
+
|
|
179
|
+
### EU DSM Directive Art 4(3) — TDM reservation
|
|
180
|
+
Machine-readable reservation required (robots.txt is advisory, not legally binding for TDM):
|
|
181
|
+
|
|
182
|
+
```html
|
|
183
|
+
<!-- In page HEAD -->
|
|
184
|
+
<meta name="tdm-reservation" content="1" />
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Or HTTP response header:
|
|
188
|
+
|
|
189
|
+
```
|
|
190
|
+
X-Robots-Tag: noai, notrain
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Reference: [W3C TDM Reservation Protocol](https://www.w3.org/2022/tdmrep/).
|
|
194
|
+
|
|
195
|
+
### EU AI Act Art 53(1)(c) — GPAI provider obligations
|
|
196
|
+
|
|
197
|
+
> **Phased application of the AI Act**: the Act entered into force 2024-08; prohibited-practice provisions applied from 2025-02; **GPAI provider obligations (Art 51-55, including Art 53 summary-of-training-data) applied from 2025-08-02**; general applicability to high-risk systems phases through 2026-08. The date below refers specifically to when Art 53 GPAI obligations became applicable, not the whole Act.
|
|
198
|
+
|
|
199
|
+
Art 53 applicable date: **2025-08-02**. General-Purpose AI Model providers (OpenAI, Anthropic, Google, etc.) must:
|
|
200
|
+
- Publish summary of training data content
|
|
201
|
+
- Respect opt-out signals including `tdm-reservation`
|
|
202
|
+
- Establish copyright policy
|
|
203
|
+
|
|
204
|
+
Content owners: monitor published training data summaries; file DMCA/EU copyright complaints if your content appears despite opt-out.
|
|
205
|
+
|
|
206
|
+
### CCPA — 2026 California extension
|
|
207
|
+
California AG 2025 guidance extends §1798.135 "right to opt-out of sale/share" to training data. Use `Global Privacy Control (GPC)` HTTP header on requests + respect inbound GPC signals if you process user data.
|
|
208
|
+
|
|
209
|
+
### Post-training content removal
|
|
210
|
+
If content was scraped before opt-out was in place:
|
|
211
|
+
- **OpenAI**: submit removal at https://platform.openai.com/privacy-removal-request (documented as of 2024)
|
|
212
|
+
- **Google Bard/Gemini training**: opt-out via Search Console > Settings > Crawling (Google-Extended block)
|
|
213
|
+
- **Perplexity**: email legal@perplexity.ai with URL + copyright assertion
|
|
214
|
+
- **Anthropic**: email privacy@anthropic.com (no public removal form as of 2026)
|
|
215
|
+
|
|
216
|
+
### Enforcement timeline summary
|
|
217
|
+
| Jurisdiction | Regulation | Effective | Status |
|
|
218
|
+
|---|---|---|---|
|
|
219
|
+
| EU | DSM Art 4 | 2019 / 2021 transposition deadline | Active |
|
|
220
|
+
| EU | AI Act Art 53 GPAI | 2025-08 | Active |
|
|
221
|
+
| US CA | CCPA training data | 2025 AG guidance | Enforceable |
|
|
222
|
+
| UK | TDM exception | 2025 consultation | Pending |
|
|
223
|
+
|
|
224
|
+
## Diagnostic signals during a technical audit
|
|
225
|
+
|
|
226
|
+
| Signal | Action |
|
|
227
|
+
|--------|--------|
|
|
228
|
+
| No `User-agent: GPTBot` / `ClaudeBot` / `PerplexityBot` rules in robots.txt | Site is using default-allow; confirm this is intentional with user |
|
|
229
|
+
| `Disallow: /` under `User-agent: *` | All bots blocked including Googlebot — usually accidental |
|
|
230
|
+
| Rules in robots.txt but no `<meta name="robots">` counterpart on high-value pages | Inconsistent — AI bots may honor meta tag differently |
|
|
231
|
+
| Server logs show `GPTBot` / `ClaudeBot` 429s or 403s | Firewall / CDN rate-limiting the bot (Cloudflare's default AI scraper rule, for example) — decide explicitly |
|
|
232
|
+
| Cloudflare "Block AI scrapers" toggle on | Check if user expects this — it overrides robots.txt |
|
|
233
|
+
|
|
234
|
+
## Cloudflare-specific (2026)
|
|
235
|
+
|
|
236
|
+
Cloudflare added a one-click "Block AI scrapers" toggle that blocks GPTBot, ClaudeBot, CCBot, and others at the edge — **before** robots.txt is evaluated. Audit step:
|
|
237
|
+
|
|
238
|
+
1. Log into Cloudflare dashboard
|
|
239
|
+
2. Security → Bots → AI Scrapers and Crawlers
|
|
240
|
+
3. Verify the toggle state matches the org's stance
|
|
241
|
+
|
|
242
|
+
If Cloudflare is blocking but robots.txt allows, the bot will never reach robots.txt — Cloudflare wins.
|
|
243
|
+
|
|
244
|
+
## Handoff addition
|
|
245
|
+
|
|
246
|
+
When the technical audit covers LLM crawler handling, include in the handoff:
|
|
247
|
+
|
|
248
|
+
- `ai_crawler_stance`: `default-open` | `default-closed` | `mixed` | `unknown`
|
|
249
|
+
- `ai_crawler_blocked`: list of bot user-agents blocked (e.g., `[GPTBot, ClaudeBot, CCBot]`)
|
|
250
|
+
- `ai_crawler_allowed`: list allowed for retrieval (e.g., `[ChatGPT-User, PerplexityBot]`)
|
|
251
|
+
- `ai_crawler_edge_override`: `true` if Cloudflare / Cloudfront is enforcing rules ahead of robots.txt
|
|
252
|
+
- Open loop: ask user to confirm or modify stance if unknown
|
|
253
|
+
|
|
254
|
+
## See also
|
|
255
|
+
|
|
256
|
+
- [geo-content-optimizer](https://github.com/aaron-he-zhu/seo-geo-claude-skills/blob/main/build/geo-content-optimizer/SKILL.md) — downstream skill that depends on AI engines actually seeing your content
|
|
257
|
+
- [entity-optimizer](https://github.com/aaron-he-zhu/seo-geo-claude-skills/blob/main/cross-cutting/entity-optimizer/SKILL.md) — blocking retrieval bots breaks AI entity recognition
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Technical SEO — Pre-Migration Playbook
|
|
2
|
+
|
|
3
|
+
Referenced from [SKILL.md](https://github.com/aaron-he-zhu/seo-geo-claude-skills/blob/main/optimize/technical-seo-checker/SKILL.md). Use when the user is planning a migration (platform, domain, URL structure, or framework change) and needs an audit + risk assessment before the change ships.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## When to use
|
|
8
|
+
|
|
9
|
+
- WordPress → Headless (Next.js, Astro, Remix, Gatsby, etc.)
|
|
10
|
+
- Shopify → custom / BigCommerce / Magento
|
|
11
|
+
- Subdomain consolidation (blog.example.com → example.com/blog)
|
|
12
|
+
- Domain change (oldbrand.com → newbrand.com)
|
|
13
|
+
- URL structure rewrite (/category/product → /product)
|
|
14
|
+
- HTTP → HTTPS (rare now, still applicable on legacy sites)
|
|
15
|
+
- CMS upgrade that rewrites URLs (e.g., major theme refactor)
|
|
16
|
+
|
|
17
|
+
## The 6 pre-migration stages
|
|
18
|
+
|
|
19
|
+
### Stage 1 — Freeze current state (baseline snapshot)
|
|
20
|
+
|
|
21
|
+
Goal: capture the **current** SEO signals so you can diff after migration.
|
|
22
|
+
|
|
23
|
+
Capture in `memory/audits/pre-migration-YYYY-MM-DD.md`:
|
|
24
|
+
|
|
25
|
+
1. **URL inventory**
|
|
26
|
+
- Full crawl via `~~web crawler` MCP or Screaming Frog / Sitebulb export
|
|
27
|
+
- Canonical list of every indexable URL, with response code, canonical tag, redirect chain
|
|
28
|
+
- Total indexable count
|
|
29
|
+
|
|
30
|
+
2. **Ranking baseline**
|
|
31
|
+
- Top 100 ranking keywords (from `~~SEO tool` or `~~search console`)
|
|
32
|
+
- For each: URL, position, volume, CTR, clicks last 90 days
|
|
33
|
+
- Save as CSV: `memory/monitoring/pre-migration-ranks.csv`
|
|
34
|
+
|
|
35
|
+
3. **Traffic baseline**
|
|
36
|
+
- Top 50 URLs by organic sessions (from `~~analytics` or `~~search console`)
|
|
37
|
+
- Last 30 + 90-day session count per URL
|
|
38
|
+
- Pages with >1% of total traffic flagged for VIP redirect review
|
|
39
|
+
|
|
40
|
+
4. **Backlink baseline**
|
|
41
|
+
- Top 100 backlinks by referring domain authority (from `~~SEO tool`)
|
|
42
|
+
- Top 50 linked URLs (on your site)
|
|
43
|
+
- Flag any URL with 10+ backlinks as HIGH-VALUE — needs exact 301 after migration
|
|
44
|
+
|
|
45
|
+
5. **Schema & entity snapshot**
|
|
46
|
+
- Current structured data (JSON-LD extracted from head) per page template
|
|
47
|
+
- Entity representation (Organization, Person, Product, Article, etc.)
|
|
48
|
+
|
|
49
|
+
### Stage 2 — Risk map
|
|
50
|
+
|
|
51
|
+
For each proposed migration change, score risk:
|
|
52
|
+
|
|
53
|
+
| Change | Risk | Impact if mishandled |
|
|
54
|
+
|--------|------|---------------------|
|
|
55
|
+
| URL structure change | HIGH | traffic loss 20-40% for 2-12 weeks |
|
|
56
|
+
| Template rewrite (meta, headers) | HIGH | keyword targeting loss |
|
|
57
|
+
| Domain change | CRITICAL | full PageRank reset without redirects |
|
|
58
|
+
| Schema change | MEDIUM | rich result loss |
|
|
59
|
+
| JS-rendered content | MEDIUM | partial deindex if not SSR |
|
|
60
|
+
| robots.txt / noindex change | CRITICAL | accidental deindex |
|
|
61
|
+
| Internal link restructure | MEDIUM | topic cluster weakness |
|
|
62
|
+
|
|
63
|
+
Produce a **GO / NOGO** recommendation per change.
|
|
64
|
+
|
|
65
|
+
### Stage 3 — Redirect map
|
|
66
|
+
|
|
67
|
+
Before any URL changes, build a one-to-one redirect map:
|
|
68
|
+
|
|
69
|
+
```csv
|
|
70
|
+
old_url,new_url,reason,priority
|
|
71
|
+
/category/blue-shoes,/shop/blue-shoes,url structure,P0
|
|
72
|
+
/product/abc-123,/product/blue-shoe,slug change,P0
|
|
73
|
+
/blog/2020/seo-tips,/blog/seo-tips,year removed,P1
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Rules:
|
|
77
|
+
- Every URL in the Stage 1 inventory MUST have a mapping or a documented decision to 410 / 404
|
|
78
|
+
- No chains (`A → B → C` must become `A → C` and `B → C`)
|
|
79
|
+
- No loops (never `A → B → A`)
|
|
80
|
+
- HIGH-VALUE URLs (Stage 1 flagged) verified manually
|
|
81
|
+
|
|
82
|
+
Save to `memory/audits/redirect-map-YYYY-MM-DD.csv`.
|
|
83
|
+
|
|
84
|
+
### Stage 4 — Staging QA
|
|
85
|
+
|
|
86
|
+
Before production cutover, QA the staging environment:
|
|
87
|
+
|
|
88
|
+
1. **Robots / indexing**: is `noindex` set on staging? Will it flip to `index` on launch? Any accidental `Disallow: /` in the production robots.txt draft?
|
|
89
|
+
2. **Template parity**: do new templates produce equivalent `<title>`, `<meta description>`, `<h1>`, canonical, schema for each page type?
|
|
90
|
+
3. **Internal linking**: run a crawl of staging; verify topic clusters intact; check for orphan pages introduced by the new template.
|
|
91
|
+
4. **Core Web Vitals**: run PSI / Lighthouse / WebPageTest on staging. LCP, INP, CLS per template. Compare to Stage 1 baseline.
|
|
92
|
+
5. **Schema validation**: validate every page-type template's JSON-LD with Schema.org validator and Google Rich Results Test.
|
|
93
|
+
6. **Pagination / facets**: if the site has collection pages, verify pagination canonical / facet canonical behavior matches or improves on the baseline.
|
|
94
|
+
|
|
95
|
+
### Stage 5 — Cutover day checklist
|
|
96
|
+
|
|
97
|
+
At launch:
|
|
98
|
+
|
|
99
|
+
1. Deploy redirects BEFORE touching DNS / robots (if possible)
|
|
100
|
+
2. Update `robots.txt` to production
|
|
101
|
+
3. Submit new `sitemap.xml` to Search Console and Bing Webmaster
|
|
102
|
+
4. Unblock crawling (remove any staging noindex)
|
|
103
|
+
5. Monitor: tail access logs for 5xx spikes, 404 spikes on old URLs
|
|
104
|
+
6. First-day rollback trigger: if 404 rate on old URLs exceeds 5% of old-URL traffic, immediately audit redirect map
|
|
105
|
+
|
|
106
|
+
### Stage 6 — Post-migration diff (T+1, T+7, T+30)
|
|
107
|
+
|
|
108
|
+
Run the same inventory as Stage 1 and diff:
|
|
109
|
+
|
|
110
|
+
- **T+1**: full crawl. Flag any URL that returns non-2xx when it should redirect.
|
|
111
|
+
- **T+7**: compare traffic per URL vs baseline. Flag URLs with >30% drop.
|
|
112
|
+
- **T+30**: compare rankings vs baseline for top 100 keywords. Flag URLs lost from top 10 / top 20.
|
|
113
|
+
|
|
114
|
+
Deliverables:
|
|
115
|
+
|
|
116
|
+
- `memory/audits/post-migration-T+1-YYYY-MM-DD.md`
|
|
117
|
+
- `memory/audits/post-migration-T+7-YYYY-MM-DD.md`
|
|
118
|
+
- `memory/audits/post-migration-T+30-YYYY-MM-DD.md`
|
|
119
|
+
|
|
120
|
+
## Handoff
|
|
121
|
+
|
|
122
|
+
- **Status**: DONE | DONE_WITH_CONCERNS | BLOCKED
|
|
123
|
+
- **Objective**: "Pre-migration audit for <change_description>"
|
|
124
|
+
- **Key Findings / Output**: baseline snapshot refs + risk map + redirect map + QA checklist
|
|
125
|
+
- **Evidence**: crawl counts, ranking CSV path, redirect CSV path, Core Web Vitals before/after (if staging ready)
|
|
126
|
+
- **Open Loops**: HIGH-VALUE URLs pending redirect confirmation, schema not validated for templates X/Y, rollback trigger thresholds not yet agreed with engineering
|
|
127
|
+
- **Recommended Next Skill**: `content-refresher` if template rewrite surfaced content-quality gaps; `schema-markup-generator` if new templates need schema authored; otherwise `rank-tracker` for post-launch monitoring
|
|
128
|
+
|
|
129
|
+
## Red-flag patterns (STOP — do not ship until fixed)
|
|
130
|
+
|
|
131
|
+
- Any redirect chain >1 hop
|
|
132
|
+
- Missing 301 on a URL with >100 monthly organic sessions
|
|
133
|
+
- `robots.txt` has `Disallow: /` anywhere in production draft
|
|
134
|
+
- Canonical tag on new URL points back to old URL
|
|
135
|
+
- JS-only content with no SSR fallback on key landing pages
|
|
136
|
+
- New template omits `<h1>` or has multiple `<h1>`
|
|
137
|
+
- Schema type changed without rich-result eligibility check
|