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.
Files changed (179) hide show
  1. package/.claude-plugin/marketplace.json +6 -0
  2. package/.claude-plugin/plugin.json +6 -0
  3. package/.codex-plugin/plugin.json +13 -0
  4. package/CHANGELOG.md +50 -0
  5. package/LICENSE +21 -0
  6. package/README.ko.md +149 -0
  7. package/README.md +148 -2
  8. package/THIRD_PARTY_NOTICES.md +10 -0
  9. package/bin/optbrew.mjs +4 -0
  10. package/docs/platforms.md +107 -0
  11. package/docs/release.md +14 -0
  12. package/lib/cli.mjs +116 -0
  13. package/lib/doctor.mjs +45 -0
  14. package/lib/install.mjs +158 -0
  15. package/lib/paths.mjs +30 -0
  16. package/lib/records.mjs +44 -0
  17. package/lib/reinstall.mjs +92 -0
  18. package/lib/transaction.mjs +205 -0
  19. package/lib/update.mjs +189 -0
  20. package/package.json +39 -4
  21. package/plugin.json +13 -0
  22. package/skills/optbrew/LICENSE +21 -0
  23. package/skills/optbrew/SKILL.md +17 -0
  24. package/skills/optbrew/THIRD_PARTY_NOTICES.md +10 -0
  25. package/skills/optbrew/agents/openai.yaml +4 -0
  26. package/skills/optbrew/bundle-manifest.json +687 -0
  27. package/skills/optbrew/licenses/firecrawl-seo-audit.txt +15 -0
  28. package/skills/optbrew/licenses/magnus-seo.txt +21 -0
  29. package/skills/optbrew/licenses/marketing-search.txt +21 -0
  30. package/skills/optbrew/licenses/mblode-seo.txt +21 -0
  31. package/skills/optbrew/licenses/naver-searchadvisor.txt +29 -0
  32. package/skills/optbrew/licenses/seranking-seo.txt +21 -0
  33. package/skills/optbrew/modules/firecrawl-seo-audit/GUIDE.md +64 -0
  34. package/skills/optbrew/modules/magnus-seo/GUIDE.md +79 -0
  35. package/skills/optbrew/modules/magnus-seo/README.md +45 -0
  36. package/skills/optbrew/modules/magnus-seo/assets/audit-report-template.md +76 -0
  37. package/skills/optbrew/modules/magnus-seo/references/aeo-methodology.md +105 -0
  38. package/skills/optbrew/modules/magnus-seo/references/agent-readable-content.md +28 -0
  39. package/skills/optbrew/modules/magnus-seo/references/content-and-entity-architecture.md +100 -0
  40. package/skills/optbrew/modules/magnus-seo/references/content-strategy-seo.md +142 -0
  41. package/skills/optbrew/modules/magnus-seo/references/discovery-and-freshness.md +47 -0
  42. package/skills/optbrew/modules/magnus-seo/references/evidence-boundaries.md +75 -0
  43. package/skills/optbrew/modules/magnus-seo/references/ghost-metadata.md +204 -0
  44. package/skills/optbrew/modules/magnus-seo/references/implementation-playbook.md +114 -0
  45. package/skills/optbrew/modules/magnus-seo/references/measurement-and-experimentation.md +47 -0
  46. package/skills/optbrew/modules/magnus-seo/references/onpage-seo.md +154 -0
  47. package/skills/optbrew/modules/magnus-seo/references/platform-guidance.md +30 -0
  48. package/skills/optbrew/modules/magnus-seo/references/schema-markup.md +244 -0
  49. package/skills/optbrew/modules/magnus-seo/references/source-index.md +36 -0
  50. package/skills/optbrew/modules/magnus-seo/references/structured-data.md +56 -0
  51. package/skills/optbrew/modules/magnus-seo/references/technical-seo.md +99 -0
  52. package/skills/optbrew/modules/magnus-seo/scripts/aeo_audit.py +158 -0
  53. package/skills/optbrew/modules/magnus-seo/scripts/build_prompt_matrix.py +52 -0
  54. package/skills/optbrew/modules/magnus-seo/templates/aeo-implementation-plan.md +53 -0
  55. package/skills/optbrew/modules/magnus-seo/templates/citation-observation-log.md +16 -0
  56. package/skills/optbrew/modules/magnus-seo/templates/llms.txt.template +15 -0
  57. package/skills/optbrew/modules/magnus-seo/templates/question-cluster.md +27 -0
  58. package/skills/optbrew/modules/magnus-seo/templates/robots-ai-crawlers.txt +23 -0
  59. package/skills/optbrew/modules/marketing-search/skills/ai-seo/GUIDE.md +483 -0
  60. package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/agent-readiness.md +57 -0
  61. package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/citations-vs-recommendations.md +85 -0
  62. package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/content-patterns.md +287 -0
  63. package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/content-types.md +71 -0
  64. package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/format-volatility.md +98 -0
  65. package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/okf.md +104 -0
  66. package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/platform-ranking-factors.md +154 -0
  67. package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/youtube-ai-citations.md +60 -0
  68. package/skills/optbrew/modules/marketing-search/skills/analytics/GUIDE.md +303 -0
  69. package/skills/optbrew/modules/marketing-search/skills/analytics/references/event-library.md +260 -0
  70. package/skills/optbrew/modules/marketing-search/skills/analytics/references/ga4-implementation.md +300 -0
  71. package/skills/optbrew/modules/marketing-search/skills/analytics/references/gtm-implementation.md +390 -0
  72. package/skills/optbrew/modules/marketing-search/skills/content-strategy/GUIDE.md +432 -0
  73. package/skills/optbrew/modules/marketing-search/skills/content-strategy/references/content-distribution.md +83 -0
  74. package/skills/optbrew/modules/marketing-search/skills/content-strategy/references/headless-cms.md +194 -0
  75. package/skills/optbrew/modules/marketing-search/skills/programmatic-seo/GUIDE.md +231 -0
  76. package/skills/optbrew/modules/marketing-search/skills/programmatic-seo/references/playbooks.md +308 -0
  77. package/skills/optbrew/modules/marketing-search/skills/schema/GUIDE.md +172 -0
  78. package/skills/optbrew/modules/marketing-search/skills/schema/references/schema-examples.md +398 -0
  79. package/skills/optbrew/modules/marketing-search/skills/seo-audit/GUIDE.md +492 -0
  80. package/skills/optbrew/modules/marketing-search/skills/seo-audit/references/ai-writing-detection.md +200 -0
  81. package/skills/optbrew/modules/marketing-search/skills/seo-audit/references/international-seo.md +230 -0
  82. package/skills/optbrew/modules/marketing-search/skills/site-architecture/GUIDE.md +350 -0
  83. package/skills/optbrew/modules/marketing-search/skills/site-architecture/references/mermaid-templates.md +216 -0
  84. package/skills/optbrew/modules/marketing-search/skills/site-architecture/references/navigation-patterns.md +305 -0
  85. package/skills/optbrew/modules/marketing-search/skills/site-architecture/references/site-type-templates.md +293 -0
  86. package/skills/optbrew/modules/mblode-seo/GUIDE.md +74 -0
  87. package/skills/optbrew/modules/mblode-seo/references/answer-engines.md +58 -0
  88. package/skills/optbrew/modules/mblode-seo/references/audit.md +78 -0
  89. package/skills/optbrew/modules/mblode-seo/references/brief-template.md +47 -0
  90. package/skills/optbrew/modules/mblode-seo/references/monitoring.md +56 -0
  91. package/skills/optbrew/modules/mblode-seo/references/nextjs-implementation.md +65 -0
  92. package/skills/optbrew/modules/mblode-seo/references/research-protocol.md +37 -0
  93. package/skills/optbrew/modules/mblode-seo/references/sources.md +47 -0
  94. package/skills/optbrew/modules/mblode-seo/references/validation-evidence.md +21 -0
  95. package/skills/optbrew/modules/naver-searchadvisor/GUIDE.md +75 -0
  96. package/skills/optbrew/modules/naver-searchadvisor/NOTICE.md +59 -0
  97. package/skills/optbrew/modules/naver-searchadvisor/references/INDEX.md +97 -0
  98. package/skills/optbrew/modules/naver-searchadvisor/scripts/audit.mjs +742 -0
  99. package/skills/optbrew/modules/naver-searchadvisor/scripts/robots.mjs +77 -0
  100. package/skills/optbrew/modules/seranking-seo/skills/seo-ai-search-share-of-voice/GUIDE.md +94 -0
  101. package/skills/optbrew/modules/seranking-seo/skills/seo-api/GUIDE.md +186 -0
  102. package/skills/optbrew/modules/seranking-seo/skills/seo-api/references/api-surface-map.md +207 -0
  103. package/skills/optbrew/modules/seranking-seo/skills/seo-api/references/auth-and-keys.md +182 -0
  104. package/skills/optbrew/modules/seranking-seo/skills/seo-api/references/integration-patterns.md +283 -0
  105. package/skills/optbrew/modules/seranking-seo/skills/seo-api/references/rate-limits-and-credits.md +235 -0
  106. package/skills/optbrew/modules/seranking-seo/skills/seo-competitor-gap-analysis/GUIDE.md +117 -0
  107. package/skills/optbrew/modules/seranking-seo/skills/seo-content-audit/GUIDE.md +155 -0
  108. package/skills/optbrew/modules/seranking-seo/skills/seo-content-audit/references/cite.md +84 -0
  109. package/skills/optbrew/modules/seranking-seo/skills/seo-content-audit/references/core-eeat.md +147 -0
  110. package/skills/optbrew/modules/seranking-seo/skills/seo-content-audit/templates/verdict.md +63 -0
  111. package/skills/optbrew/modules/seranking-seo/skills/seo-firecrawl/GUIDE.md +141 -0
  112. package/skills/optbrew/modules/seranking-seo/skills/seo-firecrawl/references/preflight.md +73 -0
  113. package/skills/optbrew/modules/seranking-seo/skills/seo-geo/GUIDE.md +159 -0
  114. package/skills/optbrew/modules/seranking-seo/skills/seo-google/GUIDE.md +393 -0
  115. package/skills/optbrew/modules/seranking-seo/skills/seo-google/assets/templates/cwv-audit-report.md +48 -0
  116. package/skills/optbrew/modules/seranking-seo/skills/seo-google/assets/templates/gsc-performance-report.md +44 -0
  117. package/skills/optbrew/modules/seranking-seo/skills/seo-google/assets/templates/indexation-status-report.md +43 -0
  118. package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/auth-setup.md +160 -0
  119. package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/cross-skill-integration.md +187 -0
  120. package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/ga4-data-api.md +184 -0
  121. package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/indexing-api.md +109 -0
  122. package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/keyword-planner-api.md +66 -0
  123. package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/nlp-api.md +55 -0
  124. package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/pagespeed-crux-api.md +204 -0
  125. package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/rate-limits-quotas.md +75 -0
  126. package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/search-console-api.md +156 -0
  127. package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/supplementary-apis.md +99 -0
  128. package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/youtube-api.md +49 -0
  129. package/skills/optbrew/modules/seranking-seo/skills/seo-keyword-niche/GUIDE.md +174 -0
  130. package/skills/optbrew/modules/seranking-seo/skills/seo-page/GUIDE.md +174 -0
  131. package/skills/optbrew/modules/seranking-seo/skills/seo-plan/GUIDE.md +220 -0
  132. package/skills/optbrew/modules/seranking-seo/skills/seo-schema/GUIDE.md +135 -0
  133. package/skills/optbrew/modules/seranking-seo/skills/seo-schema/references/google-rich-results.md +89 -0
  134. package/skills/optbrew/modules/seranking-seo/skills/seo-schema/templates/article.json +23 -0
  135. package/skills/optbrew/modules/seranking-seo/skills/seo-schema/templates/breadcrumb-list.json +18 -0
  136. package/skills/optbrew/modules/seranking-seo/skills/seo-schema/templates/faq-page.json +22 -0
  137. package/skills/optbrew/modules/seranking-seo/skills/seo-schema/templates/local-business.json +32 -0
  138. package/skills/optbrew/modules/seranking-seo/skills/seo-schema/templates/product.json +25 -0
  139. package/skills/optbrew/modules/seranking-seo/skills/seo-sitemap/GUIDE.md +128 -0
  140. package/skills/optbrew/modules/seranking-seo/skills/seo-technical-audit/GUIDE.md +235 -0
  141. package/skills/optbrew/modules/seranking-seo/skills/seo-technical-audit/references/severity-mapping.md +133 -0
  142. package/skills/optbrew/references/ai-crawlers.json +21 -0
  143. package/skills/optbrew/references/ai-crawlers.md +24 -0
  144. package/skills/optbrew/references/api.md +45 -0
  145. package/skills/optbrew/references/check-registry.json +28 -0
  146. package/skills/optbrew/references/evidence.md +9 -0
  147. package/skills/optbrew/references/intake.md +9 -0
  148. package/skills/optbrew/references/measurement.md +29 -0
  149. package/skills/optbrew/references/policies.md +7 -0
  150. package/skills/optbrew/references/profiles.json +13 -0
  151. package/skills/optbrew/references/remediations.json +12 -0
  152. package/skills/optbrew/references/report.md +29 -0
  153. package/skills/optbrew/references/routing.md +15 -0
  154. package/skills/optbrew/references/schemas/contract.schema.json +51 -0
  155. package/skills/optbrew/references/scoring.md +62 -0
  156. package/skills/optbrew/scripts/adapters/anthropic.mjs +116 -0
  157. package/skills/optbrew/scripts/adapters/imports.mjs +81 -0
  158. package/skills/optbrew/scripts/audit.mjs +124 -0
  159. package/skills/optbrew/scripts/cli.mjs +41 -0
  160. package/skills/optbrew/scripts/core/bootstrap.mjs +31 -0
  161. package/skills/optbrew/scripts/core/bundle.mjs +73 -0
  162. package/skills/optbrew/scripts/core/capabilities.mjs +19 -0
  163. package/skills/optbrew/scripts/core/collector.mjs +250 -0
  164. package/skills/optbrew/scripts/core/compare.mjs +47 -0
  165. package/skills/optbrew/scripts/core/contracts.mjs +144 -0
  166. package/skills/optbrew/scripts/core/cost-ledger.mjs +95 -0
  167. package/skills/optbrew/scripts/core/crawlers.mjs +11 -0
  168. package/skills/optbrew/scripts/core/derive.mjs +168 -0
  169. package/skills/optbrew/scripts/core/facts.mjs +189 -0
  170. package/skills/optbrew/scripts/core/findings.mjs +54 -0
  171. package/skills/optbrew/scripts/core/html.mjs +53 -0
  172. package/skills/optbrew/scripts/core/metrics.mjs +97 -0
  173. package/skills/optbrew/scripts/core/protocol.mjs +125 -0
  174. package/skills/optbrew/scripts/core/report.mjs +742 -0
  175. package/skills/optbrew/scripts/core/scope.mjs +52 -0
  176. package/skills/optbrew/scripts/core/score.mjs +71 -0
  177. package/skills/optbrew/scripts/core/weights.mjs +139 -0
  178. package/skills/optbrew/source-lock.json +2686 -0
  179. package/source-lock.json +2686 -0
@@ -0,0 +1,142 @@
1
+ # Content Strategy SEO Reference
2
+
3
+ Content strategy SEO ensures that what you write positions you to be discovered for the queries your audience actually searches for.
4
+
5
+ ## Topic Clusters & Pillar Pages
6
+
7
+ The modern SEO content architecture replaces the old model of writing individual articles about individual keywords. Instead, content is organized into **topic clusters** centered on **pillar pages**.
8
+
9
+ ### How It Works
10
+
11
+ - **Pillar page:** A comprehensive, long-form guide to a broad topic (e.g., "The Complete Guide to AI Agent Memory Systems"). It covers the topic broadly and links out to cluster content.
12
+ - **Cluster content:** Specific articles that dive deep into sub-topics (e.g., "What is a Vector Database?", "How RAG Works", "GraphRAG vs Vector Search"). Each cluster article links BACK to the pillar page.
13
+ - **Internal linking:** Cluster → pillar (always). Pillar → cluster (when relevant).
14
+
15
+ ### Why It Works
16
+
17
+ - **Topical authority:** A group of pages all linking to each other around a common topic signals deep expertise to search engines
18
+ - **SERP dominance:** Instead of competing for one keyword, you compete for an entire topic area
19
+ - **User experience:** Readers naturally flow from intro content (pillar) to deep dives (clusters)
20
+
21
+ ### Applying to Platform-specific implementation notes
22
+
23
+ **example.com — Example clusters:**
24
+ - Pillar: "AI Agent Memory Systems"
25
+ - Clusters: "Vector Databases for Agent Memory," "Knowledge Graphs vs Vector Search," "a content inventory Thought-Graph Architecture," "What is GraphRAG?"
26
+
27
+ **example.com — Example clusters:**
28
+ - Pillar: "Enterprise AI Agent Deployment"
29
+ - Clusters: "RAG at Scale: Lessons from Production," "AI Agent Orchestration," "Security Considerations for Enterprise AI," "Cost Optimization for LLM Inference"
30
+
31
+ ## Keyword Research
32
+
33
+ ### Process
34
+ 1. **Identify seed keywords** — the 3-5 core terms that define your site's domain
35
+ 2. **Expand via SERP analysis** — search each seed keyword and analyze the "People also ask" box, related searches at page bottom, and the top-ranking pages' headlines
36
+ 3. **Identify question-based queries** — "how does X work", "what is Y", "why Z matters" — these are excellent for featured snippet opportunities
37
+ 4. **Analyze search intent** — is the query informational (learning), navigational (finding a specific site), commercial (comparing options), or transactional (buying)? Match your content type to intent.
38
+ 5. **Assess competition** — are the top 10 results thin blog posts or deep authoritative guides? If the top results are weak, there's an opportunity.
39
+
40
+ ### Keyword Mapping
41
+
42
+ Map each article to 1 primary keyword and 2-5 secondary/related keywords:
43
+
44
+ ```
45
+ Article: "The Artifact Pyramid: Progressive Disclosure for Agent Outputs"
46
+ Primary: "artifact pyramid"
47
+ Secondary: "progressive disclosure AI", "multi-agent output structure",
48
+ "agent collaboration format", "research output pyramid"
49
+ ```
50
+
51
+ ### Tools
52
+ - Google Search Console (what queries your site already ranks for)
53
+ - Google "People also ask" / related searches (free, authoritative)
54
+ - AnswerThePublic (question-based query discovery)
55
+ - Ahrefs / Semrush (paid — comprehensive keyword data)
56
+
57
+ ## SERP Feature Targeting
58
+
59
+ Target specific SERP features by structuring content appropriately:
60
+
61
+ | SERP Feature | Best for | Content Structure |
62
+ |-------------|----------|-------------------|
63
+ | **Featured Snippet (Paragraph)** | "What is X" questions | Direct answer in first paragraph after H2. 40-50 words. |
64
+ | **Featured Snippet (List)** | "Steps to X", "Types of X" | Numbered or bulleted list in the content. |
65
+ | **Featured Snippet (Table)** | Comparisons, specifications | HTML table with clear headers and data. |
66
+ | **FAQ Rich Result** | Multiple related questions | FAQPage schema with 2+ Q&A pairs visible in content. |
67
+ | **HowTo Rich Result** | Tutorials, guides | HowTo schema with numbered steps. |
68
+ | **People Also Ask** | Question-based queries | Address each question in its own H2 section. |
69
+ | **Knowledge Panel** | Brand/organization queries | Organization schema, Wikipedia entry, verified social profiles. |
70
+
71
+ ## Content Gap Analysis
72
+
73
+ ### Process
74
+ 1. **Identify your target keywords** (the terms you WANT to rank for)
75
+ 2. **Check your current rankings** (do you already have content for these?)
76
+ 3. **Analyze top 10 results** for each keyword:
77
+ - What content format are they using? (listicle, guide, video, tool)
78
+ - How long is the content?
79
+ - What angle do they take?
80
+ - What's missing from their coverage?
81
+ 4. **Identify gaps:** Topics where your site has no content, or where your content is weaker than competitors'
82
+ 5. **Prioritize:** Volume × difficulty × relevance — focus on high-volume gaps that you can credibly fill
83
+
84
+ ### Gap Types
85
+ - **Missing topic:** No content exists on your site for a search-worthy topic
86
+ - **Thin content:** Content exists but is significantly weaker than competitors'
87
+ - **Outdated content:** Content exists but is no longer accurate or current
88
+ - **Format gap:** Competitors rank with a format you haven't used (e.g., video, interactive tool, data study)
89
+
90
+ ## Topical Authority
91
+
92
+ Topical authority is built over time by publishing a breadth and depth of content on a subject. It's the most defensible SEO strategy because it can't be replicated quickly.
93
+
94
+ ### Building Topical Authority
95
+ 1. **Publish the pillar page first** — broad, comprehensive, definitive
96
+ 2. **Publish cluster content regularly** — 2-3 sub-topic articles per month
97
+ 3. **Interlink systematically** — every cluster article links to the pillar; the pillar links to clusters
98
+ 4. **Refresh content** — update pillar pages annually, cluster content as needed
99
+ 5. **Expand scope** — once you've covered the core topic, expand to adjacent topics
100
+
101
+ ### Signals of Topical Authority
102
+ - Your content ranks for multiple related keywords
103
+ - Your content appears in "People also ask" for the topic
104
+ - Other sites link to your content as a reference
105
+ - Your content is cited in academic or industry publications
106
+
107
+ ## Platform-specific implementation notes — SEO Opportunity Assessment
108
+
109
+ | Site | Domain Authority | Primary Keyword Focus | Largest Gap |
110
+ |------|-----------------|----------------------|-------------|
111
+ | example.com | Low (newer personal blog) | AI philosophy, neurodiversity, engineering | Few internal links between related posts; no topic cluster structure |
112
+ | example.com | Low (newer enterprise AI blog) | Enterprise AI strategy, agentic AI | Very new — needs pillar pages and cluster strategy from the start |
113
+ | example.org | Very low (community site) | Mesh networking, MeshCore, RDUMesh | Local SEO for Raleigh/Durham; community resource queries |
114
+ | example.net | Minimal | Southeast mesh networking | Mostly informational — just needs proper on-page SEO |
115
+
116
+ ### Recommended Actions by Site
117
+
118
+ **example.com:**
119
+ - Implement topic clusters retroactively (group existing posts into 3-4 clusters with pillar pages)
120
+ - Ensure every post links to 2-3 other posts
121
+ - Add FAQPage schema to posts that answer multiple questions
122
+ - Optimize for "People also ask" by structuring content around questions
123
+
124
+ **example.com:**
125
+ - Plan pillar pages first before creating more isolated content
126
+ - Target question-based keywords for featured snippet opportunities
127
+ - Implement TechArticle schema on all technical posts
128
+ - Focus on long-tail, low-competition keywords in the short term
129
+
130
+ **example.org:**
131
+ - Local SEO: "mesh network Raleigh," "MeshCore North Carolina"
132
+ - Community-Q&A content for FAQ rich results
133
+ - Event pages for meetup/community gathering SEO
134
+
135
+ ## Content Calendar
136
+
137
+ SEO content strategy produces a **ranked list** of content opportunities, not a dated calendar. Editorial schedules vary; prioritize by evidence rather than a fixed calendar. Prioritize by:
138
+
139
+ 1. **Search volume × relevance** — How many searches × how well it fits the site
140
+ 2. **Competition gap** — How much better can we be than the current top results?
141
+ 3. **Ease of creation** — Does the research already exist in the vault or is it a new domain?
142
+ 4. **Pillar dependency** — Should this be created before or after the pillar page?
@@ -0,0 +1,47 @@
1
+ # AEO discovery and freshness
2
+
3
+ ## Crawl is not citation
4
+
5
+ A page must be reachable and eligible before many systems can retrieve it, but a successful fetch is not proof of indexing, retrieval, citation, or traffic. Verify each boundary separately.
6
+
7
+ ## Robots policy
8
+
9
+ Robots Exclusion Protocol rules are crawler-specific. Build a policy matrix before changing them:
10
+
11
+ - search crawler and search visibility;
12
+ - training crawler and training use;
13
+ - user-triggered fetch;
14
+ - ad, commercial, or partner crawler;
15
+ - private paths and sensitive data.
16
+
17
+ OpenAI explicitly separates OAI-SearchBot, GPTBot, and ChatGPT-User. Google uses Googlebot for Search controls and Google-Extended for certain other systems. Other providers have their own semantics. Never copy a universal allowlist from a blog post.
18
+
19
+ Check robots at the origin, CDN, and public URL. Record propagation expectations. A robots file is a policy control, not an AEO optimization switch.
20
+
21
+ ## Sitemaps and internal links
22
+
23
+ Use crawlable internal links and an accurate XML sitemap. Include canonical URLs and truthful `lastmod` values. Bing documents sitemaps and IndexNow as discovery/freshness aids; they do not guarantee AI inclusion. Do not set `lastmod` to sitemap generation time when page content did not change.
24
+
25
+ ## Freshness
26
+
27
+ Freshness means the answer is current for its question. A real update should identify what changed, update visible dates where appropriate, refresh structured data, repair links, and re-run high-risk observations. Date-only edits, “updated” badges without changed content, and stale citations damage trust.
28
+
29
+ ## Access verification
30
+
31
+ ```text
32
+ GET /robots.txt → expected policy, status, content type
33
+ GET /sitemap.xml → expected URL and true lastmod
34
+ GET /target → status, canonical, robots meta, visible answer
35
+ GET /target as crawler → only where permitted and provider semantics are known
36
+ ```
37
+
38
+ Inspect edge caching and authentication. A browser page that renders content only after a client-side request needs a separate rendered verification.
39
+
40
+ ## Primary references
41
+
42
+ - [RFC 9309 Robots Exclusion Protocol](https://datatracker.ietf.org/doc/html/rfc9309)
43
+ - [Google robots.txt interpretation](https://developers.google.com/crawling/docs/robots-txt/robots-txt-spec)
44
+ - [Google AI features and your website](https://developers.google.com/search/docs/appearance/ai-features)
45
+ - [OpenAI crawler documentation](https://platform.openai.com/docs/bots)
46
+ - [Bing sitemap and IndexNow guidance](https://blogs.bing.com/webmaster/July-2025/Keeping-Content-Discoverable-with-Sitemaps-in-AI-Powered-Search)
47
+ - [Sitemaps protocol](https://www.sitemaps.org/protocol.html)
@@ -0,0 +1,75 @@
1
+ # AEO evidence boundaries
2
+
3
+ ## Working definition
4
+
5
+ Answer Engine Optimization is the disciplined work of improving the chance that a useful, attributable answer about a defined entity or topic can be discovered, retrieved, interpreted, and cited by an AI answer surface. The definition is operational, not a claim that providers expose one controllable ranking system.
6
+
7
+ AEO overlaps with SEO because many answer surfaces retrieve from search indexes. It is narrower because the primary outcome is answer inclusion and citation quality rather than a blue-link position. GEO, LLMO, AI search optimization, and answer optimization are overlapping industry labels; preserve the label used by the target provider or stakeholder, then define the actual outcome.
8
+
9
+ ## Outcome taxonomy
10
+
11
+ Never collapse these into one metric:
12
+
13
+ | Outcome | Meaning | Evidence needed |
14
+ |---|---|---|
15
+ | Crawl access | A named crawler could fetch the resource | Server/CDN logs or provider documentation |
16
+ | Index eligibility | A page can enter a provider's index | Provider diagnostics; not guaranteed by a 200 |
17
+ | Retrieval | A page was selected for a query or grounding step | Provider-native data or a reproducible observation |
18
+ | Mention | Entity appears in generated text | Exact answer snapshot |
19
+ | Citation | Answer links or names a source | Exact answer plus URL |
20
+ | Citation correctness | Citation supports the adjacent claim | Read the cited source and compare scope |
21
+ | Share of voice | Entity appears relative to a defined comparator set | Frozen prompts, sampling, date, scoring rules |
22
+ | Click/referral | User visits after an answer interaction | Analytics with known attribution limits |
23
+ | Conversion | User completes a defined outcome | Instrumented funnel and causal design |
24
+
25
+ ## Evidence labels
26
+
27
+ Use these labels in plans, reports, and references:
28
+
29
+ - **Primary documentation:** provider, standards body, schema vocabulary, or tool owner documents its own behavior.
30
+ - **Observed:** a recorded answer, crawl, response header, rendered page, dashboard value, or reproducible local result.
31
+ - **Independent study:** a method and dataset are disclosed well enough to assess, but it may not generalize.
32
+ - **Vendor-reported:** a commercial provider reports an analysis, lift, or benchmark. Useful as a hypothesis source, not a universal rule.
33
+ - **Inference:** a reasoned interpretation that goes beyond direct observation. Mark it as such.
34
+ - **Unresolved:** plausible but not verified, provider-dependent, stale, or contradicted.
35
+
36
+ ## What Google establishes
37
+
38
+ Google's current Search Central guidance says its AI Overviews and AI Mode use existing Search systems and that there are no additional technical requirements or special AI markup required. It recommends ordinary crawlability, index eligibility, helpful people-first content, clear textual content, internal links, accurate structured data, and Search Console measurement. Google also says it does not use `llms.txt` for Google Search visibility and rejects mandatory chunking, exact long-tail rewrites, and inauthentic mentions as universal requirements.
39
+
40
+ This is not evidence about every other answer engine. Store provider scope beside every tactic.
41
+
42
+ ## Strong claims to reject
43
+
44
+ Reject or narrow claims such as:
45
+
46
+ - “Do X and ChatGPT will cite you.”
47
+ - “FAQPage gives a fixed citation multiplier.”
48
+ - “Short paragraphs are required by all LLMs.”
49
+ - “`llms.txt` is a standard adopted by search engines.”
50
+ - “A successful crawl proves indexing or citation.”
51
+ - “More pages or more mentions create authority.”
52
+ - “A before/after citation change proves causation.”
53
+
54
+ A useful replacement states the target provider, the observed behavior, the evidence source, the date, and what remains unknown.
55
+
56
+ ## Source review card
57
+
58
+ For every material claim, record:
59
+
60
+ ```text
61
+ claim:
62
+ source_url:
63
+ source_title:
64
+ authority_tier: primary | standard | independent | vendor | discovery-only
65
+ provider_scope:
66
+ accessed_on:
67
+ exact_supporting_observation:
68
+ what_it_does_not_prove:
69
+ confidence: high | medium | low
70
+ refresh_trigger:
71
+ ```
72
+
73
+ ## Completion boundary
74
+
75
+ An AEO implementation is complete only when the requested changes exist, each changed boundary has been verified, and the report separates implemented, observed, inferred, and unresolved outcomes. A citation or traffic improvement is an outcome to measure later, not a completion prerequisite that can be fabricated.
@@ -0,0 +1,204 @@
1
+ # Ghost CMS Metadata & Schema Completion
2
+
3
+ For Ghost CMS sites (example.com, example.org, example.net), the SEO specialist is responsible for completing all metadata on every published or draft article. This covers three distinct layers: Ghost CMS metadata fields, social media cards, and code-injected structured data.
4
+
5
+ ## Layer 1: Ghost CMS Metadata Fields
6
+
7
+ Every Ghost post and page has a set of metadata fields in the post settings panel (or settable via the Ghost Admin API / ghost-cli). These must be filled for every article.
8
+
9
+ ### Fields
10
+
11
+ | Field | Required | Purpose | Best Practice |
12
+ |-------|----------|---------|---------------|
13
+ | **Meta Title** | Always | Overrides the post title for SEO. Controls the `<title>` tag. | 50-60 chars, primary keyword front-loaded. If not set, Ghost uses the post title (which may be too long or lack keyword focus). |
14
+ | **Meta Description** | Always | Overrides excerpt for SEO. Controls the meta description tag. | 150-160 chars, includes primary keyword + CTA, reads naturally. |
15
+ | **Custom Excerpt** | Always | Used in card previews, RSS feeds, and as fallback for meta description. | 1-2 sentences capturing the article's core argument. Shorter than meta description (~120 chars). NOT the same as meta description — serves different contexts (card previews, not SERPs). |
16
+ | **OG Title** | Recommended | Overrides the title for social sharing (Facebook, LinkedIn, Discord). | Defaults to meta title. Only needed if the social version should differ. |
17
+ | **OG Description** | Recommended | Overrides the description for social sharing. | Defaults to meta description. Only needed if the social version should differ. |
18
+ | **OG Image** | Always | The image that appears in social card previews. | Should be the article's feature/cover image. If not set, Ghost uses the feature image from the post. Set explicitly to ensure correct crop and fallback. |
19
+ | **Twitter Title** | Recommended | Overrides the title for Twitter/X card previews. | Defaults to OG title. Only needed if the Twitter version should differ. |
20
+ | **Twitter Description** | Recommended | Overrides the description for Twitter/X. | Defaults to OG description. |
21
+ | **Twitter Image** | Recommended | Overrides the image for Twitter/X. | Defaults to OG image. Twitter's card crop differs from OG — set explicitly if the feature image crop doesn't work well as a square. |
22
+ | **Canonical URL** | As needed | Overrides the canonical URL. | Only needed if the post is syndicated or republished from another source. Ghost auto-generates self-referencing canonicals. |
23
+ | **Slug** | As needed | URL path. | Set before publish. Never change after publish without a 301 redirect. |
24
+
25
+ ### Setting via ghost-cli
26
+
27
+ The `ghost-cli` tool has a `meta set` command for individual fields:
28
+
29
+ ```bash
30
+ # Set meta title and description
31
+ ghost-cli --site example meta set <slug> \
32
+ --meta-title "Primary Keyword Context | Groktopus" \
33
+ --meta-description "150-160 char summary with keyword and call to action."
34
+
35
+ # Set OG and Twitter fields
36
+ ghost-cli --site example meta set <slug> \
37
+ --og-title "Optional: different from meta title" \
38
+ --og-description "Optional: different from meta description" \
39
+ --twitter-title "Optional: different from OG title"
40
+ ```
41
+
42
+ ### Setting via Ghost Admin API
43
+
44
+ For bulk operations or automation, use the Admin API directly. The key fields in the post object are:
45
+
46
+ ```json
47
+ {
48
+ "posts": [{
49
+ "id": "post-id",
50
+ "meta_title": "SEO Title",
51
+ "meta_description": "SEO Description",
52
+ "custom_excerpt": "Brief excerpt for cards",
53
+ "og_image": "https://example.com/image.jpg",
54
+ "og_title": "Social Title",
55
+ "og_description": "Social Description",
56
+ "twitter_image": "https://example.com/twitter-image.jpg",
57
+ "twitter_title": "Twitter Title",
58
+ "twitter_description": "Twitter Description",
59
+ "canonical_url": null,
60
+ "codeinjection_head": "<script type=\"application/ld+json\">...</script>",
61
+ "codeinjection_foot": ""
62
+ }]
63
+ }
64
+ ```
65
+
66
+ **Important:** When updating a post via PUT, you must include `updated_at` from the current post data — Ghost uses it for optimistic locking. Always fetch first, modify, then PUT.
67
+
68
+ ## Layer 2: Social Media Cards
69
+
70
+ Social media cards control what appears when an article is shared on Facebook, LinkedIn, Discord, Twitter/X, Slack, and other platforms.
71
+
72
+ ### How Ghost Generates Cards
73
+
74
+ Ghost automatically generates Open Graph and Twitter Card meta tags from the post's metadata fields:
75
+
76
+ ```html
77
+ <meta property="og:site_name" content="Groktopus">
78
+ <meta property="og:type" content="article">
79
+ <meta property="og:title" content="[OG Title or Meta Title or Post Title]">
80
+ <meta property="og:description" content="[OG Description or Meta Description or Excerpt]">
81
+ <meta property="og:image" content="[OG Image or Feature Image]">
82
+ <meta property="og:url" content="[Post URL]">
83
+ <meta name="twitter:card" content="summary_large_image">
84
+ <meta name="twitter:title" content="[Twitter Title or OG Title or Meta Title]">
85
+ <meta name="twitter:description" content="[Twitter Description or OG Description or Meta Description]">
86
+ <meta name="twitter:image" content="[Twitter Image or OG Image or Feature Image]">
87
+ <meta name="twitter:site" content="@example">
88
+ <meta name="twitter:creator" content="@example">
89
+ ```
90
+
91
+ ### Fallback Chain
92
+
93
+ - **OG Title:** OG Title → Meta Title → Post Title
94
+ - **OG Description:** OG Description → Meta Description → Custom Excerpt
95
+ - **OG Image:** OG Image → Feature Image
96
+ - **Twitter Title:** Twitter Title → OG Title → Meta Title → Post Title
97
+ - **Twitter Image:** Twitter Image → OG Image → Feature Image
98
+
99
+ ### Verification
100
+
101
+ ```bash
102
+ # Check what tags are being emitted
103
+ curl -s https://example.com/<slug>/ | grep -E 'og:|twitter:'
104
+
105
+ # Test with validators
106
+ # Facebook: https://developers.facebook.com/tools/debug/
107
+ # Twitter: https://cards-dev.twitter.com/validator
108
+ # LinkedIn: https://www.linkedin.com/post-inspector/
109
+ ```
110
+
111
+ ## Layer 3: Code-Injected Schema
112
+
113
+ Ghost CMS auto-generates basic Article/BlogPosting schema, but custom schema types (TechArticle, FAQPage, HowTo, Organization with areaServed) must be code-injected.
114
+
115
+ ### Injection Points in Ghost
116
+
117
+ | Location | Scope | Method |
118
+ |----------|-------|--------|
119
+ | **Site-wide** (`ghost_head`) | Every page on the site | Settings → Code Injection → Site Header |
120
+ | **Per-post** | Single post only | Post Settings → Code Injection → Post Header |
121
+ | **Per-page** | Single page only | Page Settings → Code Injection → Post Header |
122
+ | **ghost-cli** | Per-post via API | `ghost-cli --site <name> schema inject <slug> --file <path>` |
123
+
124
+ ### Per-Page Schema via ghost-cli
125
+
126
+ The ghost-cli `schema inject` command handles the API call and stores the schema in the post's `codeinjection_head` field:
127
+
128
+ ```bash
129
+ # Validate and inject FAQPage schema
130
+ ghost-cli --site example schema validate --json '{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Q?","acceptedAnswer":{"@type":"Answer","text":"A."}}]}'
131
+
132
+ ghost-cli --site example schema inject my-post --file /tmp/faq-schema.json
133
+ ```
134
+
135
+ ### Injecting Multiple Schema Types with @graph
136
+
137
+ When a post benefits from multiple schema types (e.g., TechArticle + FAQPage), wrap them in a `@graph` array:
138
+
139
+ ```json
140
+ {
141
+ "@context": "https://schema.org",
142
+ "@graph": [
143
+ {
144
+ "@type": "TechArticle",
145
+ "headline": "Post Title",
146
+ "proficiencyLevel": "Advanced",
147
+ "about": {"@type": "Thing", "name": "AI Agent Memory"}
148
+ },
149
+ {
150
+ "@type": "FAQPage",
151
+ "mainEntity": [
152
+ {"@type": "Question", "name": "Q1?", "acceptedAnswer": {"@type": "Answer", "text": "A1."}},
153
+ {"@type": "Question", "name": "Q2?", "acceptedAnswer": {"@type": "Answer", "text": "A2."}}
154
+ ]
155
+ }
156
+ ]
157
+ }
158
+ ```
159
+
160
+ ### Schema Coverage by Site
161
+
162
+ | Site | Required Schema | Injection Method |
163
+ |------|----------------|------------------|
164
+ | **example.com** | Organization (site-wide), TechArticle (per-post), FAQPage (when applicable) | ghost-cli `schema inject` for per-post; Code Injection → Settings for site-wide |
165
+ | **example.org** | Organization + areaServed (site-wide), Article (auto), FAQPage (FAQ content), LocalBusiness if applicable | Same pattern |
166
+ | **example.net** | Organization (site-wide), Article (auto) | Same pattern |
167
+
168
+ ### Validation
169
+
170
+ Every schema injection must be validated:
171
+
172
+ 1. **Google Rich Results Test:** https://search.google.com/test/rich-results
173
+ 2. **Schema.org Validator:** https://validator.schema.org/
174
+ 3. **Manual check:** View page source → search for `application/ld+json`
175
+
176
+ ## Completion Checklist
177
+
178
+ For every article publish:
179
+
180
+ - [ ] **Meta Title** set (50-60 chars, keyword front-loaded)
181
+ - [ ] **Meta Description** set (150-160 chars, includes keyword + CTA)
182
+ - [ ] **Custom Excerpt** set (1-2 sentence summary for cards)
183
+ - [ ] **OG Image** set (article feature image or explicit OG image)
184
+ - [ ] **OG Title** verified (at minimum, confirm it defaults acceptably)
185
+ - [ ] **OG Description** verified (at minimum, confirm it defaults acceptably)
186
+ - [ ] **Twitter card** type confirmed (summary_large_image)
187
+ - [ ] **Canonical URL** confirmed (self-referencing unless syndicated)
188
+ - [ ] **Schema injected** (TechArticle for example.com, FAQPage if applicable)
189
+ - [ ] **Schema validated** (Google Rich Results Test passes)
190
+ - [ ] **Feature image** has alt text and caption
191
+ - [ ] **Slug** is optimized (30-45 chars, primary keyword, stable)
192
+
193
+ ## Post-Publish Verification
194
+
195
+ ```bash
196
+ # 1. Check meta tags render
197
+ curl -s https://<site>/<slug>/ | grep -E '<title|name="description"|property="og:|name="twitter:'
198
+
199
+ # 2. Check schema renders
200
+ curl -s https://<site>/<slug>/ | grep 'application/ld+json'
201
+
202
+ # 3. Validate schema (requires the JSON block)
203
+ # Pipe the extracted JSON-LD to the Rich Results Test API
204
+ ```
@@ -0,0 +1,114 @@
1
+ # AEO implementation playbook
2
+
3
+ ## Phase 0: Scope the answer surface
4
+
5
+ Write a one-page scope before editing:
6
+
7
+ - audience and decision/job to be done;
8
+ - canonical entities, aliases, products, places, and disambiguators;
9
+ - target providers and surfaces, such as Google AI features, Bing Copilot, ChatGPT Search, or Perplexity;
10
+ - question families: definition, comparison, procedure, recommendation, troubleshooting, current status;
11
+ - desired outcome and non-goals;
12
+ - access, privacy, legal, and publication constraints;
13
+ - baseline date and evidence cutoff.
14
+
15
+ If the target surface is unknown, do not invent provider-specific tactics. Run a discovery pass and label the target as unresolved.
16
+
17
+ ## Phase 1: Build the evidence and question map
18
+
19
+ 1. Gather provider documentation before practitioner advice.
20
+ 2. Gather authoritative subject sources and independent corroboration.
21
+ 3. Build question clusters. Merge near-duplicates and identify questions that need separate pages because their answer, audience, freshness, or evidence differs.
22
+ 4. Assign one canonical answer location to every retained question.
23
+ 5. Record claims as source observation, vendor claim, inference, or unresolved conflict.
24
+ 6. Identify stale, contradictory, or unsupported existing answers before rewriting them.
25
+
26
+ Use `templates/question-cluster.md` and the source card in `references/evidence-boundaries.md`.
27
+
28
+ ## Phase 2: Implement the answer asset
29
+
30
+ For every canonical page or section:
31
+
32
+ 1. State the answer in the opening sentence or compact summary.
33
+ 2. Follow with scope, conditions, evidence, examples, and useful next actions.
34
+ 3. Use headings that describe the reader's question without turning every keyword permutation into a page.
35
+ 4. Use lists, tables, definitions, and examples where they improve human comprehension.
36
+ 5. Keep entity names, versions, dates, units, and terminology consistent.
37
+ 6. Link to primary evidence at the claim it supports, not only in a distant bibliography.
38
+ 7. Distinguish current facts from historical context and forecasts.
39
+ 8. Preserve a clear author/reviewer/update record where the subject warrants it.
40
+ 9. Add a “what this does not mean” boundary for comparisons, safety, policy, or high-stakes claims.
41
+
42
+ Do not delete nuance to make a page more extractable. A concise answer followed by a qualification is better than an unqualified slogan.
43
+
44
+ ## Phase 3: Add machine-readable and discovery support selectively
45
+
46
+ Choose only changes justified by the target provider and page content:
47
+
48
+ - JSON-LD that matches visible content and the correct Schema.org type;
49
+ - canonical links, crawlable internal links, accurate sitemap entries, and truthful `lastmod`;
50
+ - provider-specific robots controls after an explicit search/training/user-fetch policy decision;
51
+ - optional `llms.txt` when a site wants to publish a curated map for systems that choose to consume the proposal;
52
+ - a Markdown representation or content negotiation only when the site can keep it equivalent to the rendered HTML and the target consumer benefits from it;
53
+ - IndexNow or provider-native submission only through the platform's operational skill and only after the URL is actually ready.
54
+
55
+ AEO does not authorize publishing, changing robots policy, or sending URLs. Confirm target, scope, and rollback before mutation, then verify the public boundary.
56
+
57
+ ## Phase 4: Verify before measurement
58
+
59
+ Run the read-only script and platform checks:
60
+
61
+ - fetch the final URL and inspect status, canonical, robots meta, headings, visible answer text, links, and JSON-LD;
62
+ - parse every JSON-LD block and compare material fields with visible content;
63
+ - check the public robots file and sitemap, including CDN/edge behavior;
64
+ - confirm true modification dates rather than generated-file timestamps;
65
+ - inspect a browser-rendered page when content is client-rendered;
66
+ - record what each check cannot prove: a 200 is not indexing, parsing is not eligibility, and eligibility is not citation.
67
+
68
+ ## Phase 5: Establish a frozen answer baseline
69
+
70
+ Use a prompt set with:
71
+
72
+ - stable IDs and exact prompt text;
73
+ - head, mid-tail, long-tail, comparison, and troubleshooting variants;
74
+ - entity disambiguation prompts;
75
+ - prompts where the correct answer should cite the target and prompts where it should not;
76
+ - competitor or alternative entities only when the comparison is fair and evidence-supported.
77
+
78
+ Record exact output and citations. Do not summarize from memory. Use `templates/citation-observation-log.md`.
79
+
80
+ ## Phase 6: Run bounded experiments
81
+
82
+ Change one meaningful variable or a coherent bundle whose rationale is documented. Keep the prompt set, observation method, date window, and scoring rubric stable. Re-run enough samples to expose variability, but do not imply statistical certainty without an appropriate design. For platform-native metrics, preserve the dashboard definition and aggregation limits.
83
+
84
+ A useful decision record says:
85
+
86
+ ```text
87
+ hypothesis → change → expected mechanism → observation window → metric → result → confounders → next decision
88
+ ```
89
+
90
+ ## Phase 7: Maintain
91
+
92
+ Set review triggers based on content risk and volatility:
93
+
94
+ - source or specification change;
95
+ - product/version release;
96
+ - policy or legal change;
97
+ - answer error or miscitation;
98
+ - provider crawler or dashboard change;
99
+ - meaningful query or conversion shift.
100
+
101
+ Do not “refresh” a page by changing dates alone. Re-verify the claims, sources, links, schema, and answer observations after material updates.
102
+
103
+ ## Acceptance gate
104
+
105
+ Pass only when:
106
+
107
+ - scope and provider boundaries are explicit;
108
+ - every retained question has a canonical answer location and owner;
109
+ - visible content answers accurately before elaborating;
110
+ - evidence, caveats, and dates are preserved;
111
+ - machine-readable fields match visible content;
112
+ - discovery and crawler changes are policy-approved and publicly verified;
113
+ - the prompt baseline and post-change observations are reproducible;
114
+ - the final report distinguishes implementation from observed impact.
@@ -0,0 +1,47 @@
1
+ # AEO measurement and experimentation
2
+
3
+ ## Measurement hierarchy
4
+
5
+ Track outcomes separately: crawl access, index eligibility, retrieval, mention, citation, citation correctness, share of voice, click, and conversion. A citation count cannot establish authority, ranking, correctness, or revenue.
6
+
7
+ ## Frozen prompt set
8
+
9
+ Store stable IDs, exact prompt text, target entity, intent, expected source boundary, and version. Include disambiguation, definition, comparison, procedure, troubleshooting, current-status, and negative-control prompts. Do not silently rewrite prompts between runs.
10
+
11
+ ## Observation record
12
+
13
+ For every run preserve date/time, provider, surface, model/version if known, account/location state, prompt ID/hash, exact answer, cited URLs, target-cited status, citation quality, correctness, and notes about provider changes. Normalize URLs for analysis without destroying the original URL.
14
+
15
+ ## Scoring
16
+
17
+ Use a rubric defined before looking at results:
18
+
19
+ - target mention: 0/1;
20
+ - target citation: 0/1;
21
+ - citation relevance: 0–2;
22
+ - citation support/correctness: 0–2;
23
+ - answer completeness: 0–2;
24
+ - harmful or misleading claim: 0/1;
25
+ - target answer coverage across the set: percentage, with denominator stated.
26
+
27
+ Keep human scoring, automated extraction, and provider-native dashboard metrics distinct.
28
+
29
+ ## Experiment design
30
+
31
+ Write `hypothesis → change → expected mechanism → prompt set → window → metric → result → confounders → decision`. Keep the content change and measurement method stable enough to compare. Repeated model outputs are not independent evidence by default. Provider model, index, UI, location, personalization, and prompt changes can confound the result.
32
+
33
+ A before/after observation supports “we observed a change under these conditions,” not “the rewrite caused the change,” unless the design supports causal inference.
34
+
35
+ ## Platform-native evidence
36
+
37
+ Google Search Console reports AI feature traffic within its search reporting and provides a generative AI performance report where available. Bing Webmaster Tools AI Performance reports citations, cited pages, grounding queries, and trends, but its documentation explicitly says aggregate values do not show ranking, authority, placement, or page importance. Preserve those definitions in the report.
38
+
39
+ ## Cadence
40
+
41
+ Use weekly or monthly checks only when the prompt set and ownership justify them. Re-run after provider changes, high-risk content updates, or observed miscitation. Stop after a bounded experiment when results are inconclusive; do not manufacture a win from more retries.
42
+
43
+ ## References
44
+
45
+ - [Bing AI Performance](https://blogs.bing.com/webmaster/February-2026/Introducing-AI-Performance-in-Bing-Webmaster-Tools-Public-Preview)
46
+ - [Google AI features measurement](https://developers.google.com/search/docs/appearance/ai-features)
47
+ - `templates/citation-observation-log.md`