optbrew 0.0.0-stage → 0.1.1

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 (172) 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 +20 -0
  5. package/LICENSE +21 -0
  6. package/README.ko.md +73 -0
  7. package/README.md +72 -2
  8. package/THIRD_PARTY_NOTICES.md +10 -0
  9. package/bin/optbrew.mjs +4 -0
  10. package/docs/platforms.md +31 -0
  11. package/docs/release.md +14 -0
  12. package/lib/cli.mjs +103 -0
  13. package/lib/doctor.mjs +44 -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/transaction.mjs +205 -0
  18. package/lib/update.mjs +181 -0
  19. package/package.json +39 -4
  20. package/plugin.json +13 -0
  21. package/skills/optbrew/LICENSE +21 -0
  22. package/skills/optbrew/SKILL.md +17 -0
  23. package/skills/optbrew/THIRD_PARTY_NOTICES.md +10 -0
  24. package/skills/optbrew/agents/openai.yaml +4 -0
  25. package/skills/optbrew/bundle-manifest.json +663 -0
  26. package/skills/optbrew/licenses/firecrawl-seo-audit.txt +15 -0
  27. package/skills/optbrew/licenses/magnus-seo.txt +21 -0
  28. package/skills/optbrew/licenses/marketing-search.txt +21 -0
  29. package/skills/optbrew/licenses/mblode-seo.txt +21 -0
  30. package/skills/optbrew/licenses/naver-searchadvisor.txt +29 -0
  31. package/skills/optbrew/licenses/seranking-seo.txt +21 -0
  32. package/skills/optbrew/modules/firecrawl-seo-audit/GUIDE.md +64 -0
  33. package/skills/optbrew/modules/magnus-seo/GUIDE.md +79 -0
  34. package/skills/optbrew/modules/magnus-seo/README.md +45 -0
  35. package/skills/optbrew/modules/magnus-seo/assets/audit-report-template.md +76 -0
  36. package/skills/optbrew/modules/magnus-seo/references/aeo-methodology.md +105 -0
  37. package/skills/optbrew/modules/magnus-seo/references/agent-readable-content.md +28 -0
  38. package/skills/optbrew/modules/magnus-seo/references/content-and-entity-architecture.md +100 -0
  39. package/skills/optbrew/modules/magnus-seo/references/content-strategy-seo.md +142 -0
  40. package/skills/optbrew/modules/magnus-seo/references/discovery-and-freshness.md +47 -0
  41. package/skills/optbrew/modules/magnus-seo/references/evidence-boundaries.md +75 -0
  42. package/skills/optbrew/modules/magnus-seo/references/ghost-metadata.md +204 -0
  43. package/skills/optbrew/modules/magnus-seo/references/implementation-playbook.md +114 -0
  44. package/skills/optbrew/modules/magnus-seo/references/measurement-and-experimentation.md +47 -0
  45. package/skills/optbrew/modules/magnus-seo/references/onpage-seo.md +154 -0
  46. package/skills/optbrew/modules/magnus-seo/references/platform-guidance.md +30 -0
  47. package/skills/optbrew/modules/magnus-seo/references/schema-markup.md +244 -0
  48. package/skills/optbrew/modules/magnus-seo/references/source-index.md +36 -0
  49. package/skills/optbrew/modules/magnus-seo/references/structured-data.md +56 -0
  50. package/skills/optbrew/modules/magnus-seo/references/technical-seo.md +99 -0
  51. package/skills/optbrew/modules/magnus-seo/scripts/aeo_audit.py +158 -0
  52. package/skills/optbrew/modules/magnus-seo/scripts/build_prompt_matrix.py +52 -0
  53. package/skills/optbrew/modules/magnus-seo/templates/aeo-implementation-plan.md +53 -0
  54. package/skills/optbrew/modules/magnus-seo/templates/citation-observation-log.md +16 -0
  55. package/skills/optbrew/modules/magnus-seo/templates/llms.txt.template +15 -0
  56. package/skills/optbrew/modules/magnus-seo/templates/question-cluster.md +27 -0
  57. package/skills/optbrew/modules/magnus-seo/templates/robots-ai-crawlers.txt +23 -0
  58. package/skills/optbrew/modules/marketing-search/skills/ai-seo/GUIDE.md +483 -0
  59. package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/agent-readiness.md +57 -0
  60. package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/citations-vs-recommendations.md +85 -0
  61. package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/content-patterns.md +287 -0
  62. package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/content-types.md +71 -0
  63. package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/format-volatility.md +98 -0
  64. package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/okf.md +104 -0
  65. package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/platform-ranking-factors.md +154 -0
  66. package/skills/optbrew/modules/marketing-search/skills/ai-seo/references/youtube-ai-citations.md +60 -0
  67. package/skills/optbrew/modules/marketing-search/skills/analytics/GUIDE.md +303 -0
  68. package/skills/optbrew/modules/marketing-search/skills/analytics/references/event-library.md +260 -0
  69. package/skills/optbrew/modules/marketing-search/skills/analytics/references/ga4-implementation.md +300 -0
  70. package/skills/optbrew/modules/marketing-search/skills/analytics/references/gtm-implementation.md +390 -0
  71. package/skills/optbrew/modules/marketing-search/skills/content-strategy/GUIDE.md +432 -0
  72. package/skills/optbrew/modules/marketing-search/skills/content-strategy/references/content-distribution.md +83 -0
  73. package/skills/optbrew/modules/marketing-search/skills/content-strategy/references/headless-cms.md +194 -0
  74. package/skills/optbrew/modules/marketing-search/skills/programmatic-seo/GUIDE.md +231 -0
  75. package/skills/optbrew/modules/marketing-search/skills/programmatic-seo/references/playbooks.md +308 -0
  76. package/skills/optbrew/modules/marketing-search/skills/schema/GUIDE.md +172 -0
  77. package/skills/optbrew/modules/marketing-search/skills/schema/references/schema-examples.md +398 -0
  78. package/skills/optbrew/modules/marketing-search/skills/seo-audit/GUIDE.md +492 -0
  79. package/skills/optbrew/modules/marketing-search/skills/seo-audit/references/ai-writing-detection.md +200 -0
  80. package/skills/optbrew/modules/marketing-search/skills/seo-audit/references/international-seo.md +230 -0
  81. package/skills/optbrew/modules/marketing-search/skills/site-architecture/GUIDE.md +350 -0
  82. package/skills/optbrew/modules/marketing-search/skills/site-architecture/references/mermaid-templates.md +216 -0
  83. package/skills/optbrew/modules/marketing-search/skills/site-architecture/references/navigation-patterns.md +305 -0
  84. package/skills/optbrew/modules/marketing-search/skills/site-architecture/references/site-type-templates.md +293 -0
  85. package/skills/optbrew/modules/mblode-seo/GUIDE.md +74 -0
  86. package/skills/optbrew/modules/mblode-seo/references/answer-engines.md +58 -0
  87. package/skills/optbrew/modules/mblode-seo/references/audit.md +78 -0
  88. package/skills/optbrew/modules/mblode-seo/references/brief-template.md +47 -0
  89. package/skills/optbrew/modules/mblode-seo/references/monitoring.md +56 -0
  90. package/skills/optbrew/modules/mblode-seo/references/nextjs-implementation.md +65 -0
  91. package/skills/optbrew/modules/mblode-seo/references/research-protocol.md +37 -0
  92. package/skills/optbrew/modules/mblode-seo/references/sources.md +47 -0
  93. package/skills/optbrew/modules/mblode-seo/references/validation-evidence.md +21 -0
  94. package/skills/optbrew/modules/naver-searchadvisor/GUIDE.md +75 -0
  95. package/skills/optbrew/modules/naver-searchadvisor/NOTICE.md +59 -0
  96. package/skills/optbrew/modules/naver-searchadvisor/references/INDEX.md +97 -0
  97. package/skills/optbrew/modules/naver-searchadvisor/scripts/audit.mjs +714 -0
  98. package/skills/optbrew/modules/naver-searchadvisor/scripts/robots.mjs +77 -0
  99. package/skills/optbrew/modules/seranking-seo/skills/seo-ai-search-share-of-voice/GUIDE.md +94 -0
  100. package/skills/optbrew/modules/seranking-seo/skills/seo-api/GUIDE.md +186 -0
  101. package/skills/optbrew/modules/seranking-seo/skills/seo-api/references/api-surface-map.md +207 -0
  102. package/skills/optbrew/modules/seranking-seo/skills/seo-api/references/auth-and-keys.md +182 -0
  103. package/skills/optbrew/modules/seranking-seo/skills/seo-api/references/integration-patterns.md +283 -0
  104. package/skills/optbrew/modules/seranking-seo/skills/seo-api/references/rate-limits-and-credits.md +235 -0
  105. package/skills/optbrew/modules/seranking-seo/skills/seo-competitor-gap-analysis/GUIDE.md +117 -0
  106. package/skills/optbrew/modules/seranking-seo/skills/seo-content-audit/GUIDE.md +155 -0
  107. package/skills/optbrew/modules/seranking-seo/skills/seo-content-audit/references/cite.md +84 -0
  108. package/skills/optbrew/modules/seranking-seo/skills/seo-content-audit/references/core-eeat.md +147 -0
  109. package/skills/optbrew/modules/seranking-seo/skills/seo-content-audit/templates/verdict.md +63 -0
  110. package/skills/optbrew/modules/seranking-seo/skills/seo-firecrawl/GUIDE.md +141 -0
  111. package/skills/optbrew/modules/seranking-seo/skills/seo-firecrawl/references/preflight.md +73 -0
  112. package/skills/optbrew/modules/seranking-seo/skills/seo-geo/GUIDE.md +159 -0
  113. package/skills/optbrew/modules/seranking-seo/skills/seo-google/GUIDE.md +393 -0
  114. package/skills/optbrew/modules/seranking-seo/skills/seo-google/assets/templates/cwv-audit-report.md +48 -0
  115. package/skills/optbrew/modules/seranking-seo/skills/seo-google/assets/templates/gsc-performance-report.md +44 -0
  116. package/skills/optbrew/modules/seranking-seo/skills/seo-google/assets/templates/indexation-status-report.md +43 -0
  117. package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/auth-setup.md +160 -0
  118. package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/cross-skill-integration.md +187 -0
  119. package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/ga4-data-api.md +184 -0
  120. package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/indexing-api.md +109 -0
  121. package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/keyword-planner-api.md +66 -0
  122. package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/nlp-api.md +55 -0
  123. package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/pagespeed-crux-api.md +204 -0
  124. package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/rate-limits-quotas.md +75 -0
  125. package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/search-console-api.md +156 -0
  126. package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/supplementary-apis.md +99 -0
  127. package/skills/optbrew/modules/seranking-seo/skills/seo-google/references/youtube-api.md +49 -0
  128. package/skills/optbrew/modules/seranking-seo/skills/seo-keyword-niche/GUIDE.md +174 -0
  129. package/skills/optbrew/modules/seranking-seo/skills/seo-page/GUIDE.md +174 -0
  130. package/skills/optbrew/modules/seranking-seo/skills/seo-plan/GUIDE.md +220 -0
  131. package/skills/optbrew/modules/seranking-seo/skills/seo-schema/GUIDE.md +135 -0
  132. package/skills/optbrew/modules/seranking-seo/skills/seo-schema/references/google-rich-results.md +89 -0
  133. package/skills/optbrew/modules/seranking-seo/skills/seo-schema/templates/article.json +23 -0
  134. package/skills/optbrew/modules/seranking-seo/skills/seo-schema/templates/breadcrumb-list.json +18 -0
  135. package/skills/optbrew/modules/seranking-seo/skills/seo-schema/templates/faq-page.json +22 -0
  136. package/skills/optbrew/modules/seranking-seo/skills/seo-schema/templates/local-business.json +32 -0
  137. package/skills/optbrew/modules/seranking-seo/skills/seo-schema/templates/product.json +25 -0
  138. package/skills/optbrew/modules/seranking-seo/skills/seo-sitemap/GUIDE.md +128 -0
  139. package/skills/optbrew/modules/seranking-seo/skills/seo-technical-audit/GUIDE.md +235 -0
  140. package/skills/optbrew/modules/seranking-seo/skills/seo-technical-audit/references/severity-mapping.md +133 -0
  141. package/skills/optbrew/references/api.md +45 -0
  142. package/skills/optbrew/references/check-registry.json +28 -0
  143. package/skills/optbrew/references/evidence.md +9 -0
  144. package/skills/optbrew/references/intake.md +9 -0
  145. package/skills/optbrew/references/measurement.md +29 -0
  146. package/skills/optbrew/references/policies.md +7 -0
  147. package/skills/optbrew/references/profiles.json +13 -0
  148. package/skills/optbrew/references/remediations.json +12 -0
  149. package/skills/optbrew/references/report.md +25 -0
  150. package/skills/optbrew/references/routing.md +15 -0
  151. package/skills/optbrew/references/schemas/contract.schema.json +51 -0
  152. package/skills/optbrew/references/scoring.md +62 -0
  153. package/skills/optbrew/scripts/adapters/anthropic.mjs +116 -0
  154. package/skills/optbrew/scripts/adapters/imports.mjs +81 -0
  155. package/skills/optbrew/scripts/audit.mjs +145 -0
  156. package/skills/optbrew/scripts/cli.mjs +41 -0
  157. package/skills/optbrew/scripts/core/bootstrap.mjs +31 -0
  158. package/skills/optbrew/scripts/core/bundle.mjs +73 -0
  159. package/skills/optbrew/scripts/core/capabilities.mjs +19 -0
  160. package/skills/optbrew/scripts/core/collector.mjs +236 -0
  161. package/skills/optbrew/scripts/core/compare.mjs +47 -0
  162. package/skills/optbrew/scripts/core/contracts.mjs +144 -0
  163. package/skills/optbrew/scripts/core/cost-ledger.mjs +95 -0
  164. package/skills/optbrew/scripts/core/findings.mjs +54 -0
  165. package/skills/optbrew/scripts/core/metrics.mjs +97 -0
  166. package/skills/optbrew/scripts/core/protocol.mjs +125 -0
  167. package/skills/optbrew/scripts/core/report.mjs +652 -0
  168. package/skills/optbrew/scripts/core/scope.mjs +52 -0
  169. package/skills/optbrew/scripts/core/score.mjs +71 -0
  170. package/skills/optbrew/scripts/core/weights.mjs +139 -0
  171. package/skills/optbrew/source-lock.json +2686 -0
  172. package/source-lock.json +2686 -0
@@ -0,0 +1,154 @@
1
+ # On-Page SEO Reference
2
+
3
+ On-page optimization ensures each piece of content is structured and written to communicate relevance to search engines while serving the reader.
4
+
5
+ ## Title Tags
6
+
7
+ The title tag is the single most important on-page SEO element. It appears in SERPs as the clickable headline.
8
+
9
+ ### Best Practices
10
+ - **Length:** 50-60 characters (Google typically displays the first 50-60 chars; titles longer than ~580px get truncated)
11
+ - **Keyword placement:** Primary keyword near the beginning (front-loaded)
12
+ - **Uniqueness:** Every page has a unique title tag — no duplicates
13
+ - **Branding:** Include site/brand name at the end (separated by `—` or `|` in SERPs, but per the publication style rule, NO emdashes in prose — for title tags, use `|` as separator)
14
+ - Example: `"SEO Audit for Ghost CMS Sites | Groktopus"`
15
+ - Example: `"The Artifact Pyramid: Progressive Disclosure for Agent Outputs | Example Author"`
16
+ - **Compelling:** Includes a value proposition or hook that earns the click
17
+ - **No keyword stuffing:** Sounds natural, not like a list of keywords
18
+
19
+ ### Platform-specific implementation notes — Patterns
20
+
21
+ **example.com (Hugo, PaperMod theme):**
22
+ - Title set in frontmatter: `title: "..."`
23
+ - Hugo auto-generates `<title>` from the title field
24
+ - Verify: `title` in frontmatter is 50-60 chars
25
+ - Site name appended automatically by PaperMod: `"Title | Example Author"`
26
+
27
+ **example.com (Ghost Pro):**
28
+ - Meta title set in Ghost post settings → Meta Data → Custom Meta Title
29
+ - Default: Post title (which may be too long — always set a custom meta title)
30
+ - Ghost appends site name automatically in the `<title>` tag
31
+ - Verify: custom meta title under 60 chars
32
+
33
+ **example.org / example.net (Ghost, self-hosted):**
34
+ - Same as example.com — custom meta title in Ghost post settings
35
+
36
+ ## Meta Descriptions
37
+
38
+ Not a direct ranking factor, but the second most important element for click-through rate from SERPs.
39
+
40
+ ### Best Practices
41
+ - **Length:** 150-160 characters (longer descriptions may be truncated)
42
+ - **Includes primary keyword + secondary keyword naturally**
43
+ - **Includes a call to action** ("Learn how...", "Discover why...", "Read the analysis")
44
+ - **Unique per page** — no duplicate or auto-generated descriptions
45
+ - **Matches search intent** — if someone searches for "progressive disclosure for agents," the description should signal that the page delivers on that query
46
+ - **Contractions and natural language** — reads like a person wrote it
47
+
48
+ ### Platform-specific implementation notes — Patterns
49
+
50
+ **example.com (Hugo, PaperMod):**
51
+ - Hugo auto-generates meta description from page summary/content if not specified
52
+ - Always set a `description:` field in frontmatter that's 150-160 chars
53
+ - This is the meta description and also used in card previews
54
+
55
+ **example.com (Ghost Pro):**
56
+ - Custom Meta Description in post settings → Meta Data
57
+ - Ghost also uses this for Open Graph description
58
+ - If not set, Ghost uses the post excerpt (which may be longer or shorter than ideal)
59
+
60
+ ## Heading Structure
61
+
62
+ Headings communicate content hierarchy to search engines and provide scanability for readers.
63
+
64
+ ### Hierarchy Rules
65
+ - **H1:** Exactly one per page. Should match the title tag (or be a slightly more readable version). Contains the primary keyword.
66
+ - **H2:** Major sections of the content. Each H2 should contain a related keyword or subtopic. Used as navigation anchors.
67
+ - **H3-H6:** Subsections under H2s. Deeper hierarchy for complex content.
68
+ - **No skipping levels:** Don't jump from H1 to H3. Hierarchically nested.
69
+
70
+ ### Checklist
71
+ - [ ] Exactly one H1 per page
72
+ - [ ] H1 matches or closely relates to the title tag
73
+ - [ ] H1 contains primary keyword
74
+ - [ ] Headings form a logical outline of the page when read alone
75
+ - [ ] No empty headings or headings used purely for styling
76
+ - [ ] Keywords appear naturally in headings (not stuffed)
77
+ - [ ] H2s and H3s are descriptive, not generic ("Introduction" is weak; "Why Progressive Disclosure Matters for AI Agents" is strong)
78
+
79
+ ## Content Quality
80
+
81
+ ### Keyword Usage
82
+ - **Primary keyword appears in:** H1, first paragraph, at least one H2, URL slug
83
+ - **Keyword density:** Natural usage — don't target specific percentages. If the keyword appears naturally 3-5 times in a 1500-word article, that's fine.
84
+ - **LSI / related keywords:** Include semantically related terms that help establish topical relevance (e.g., for an article about "artifact pyramids," include terms like "progressive disclosure," "multi-agent pipelines," "agent collaboration")
85
+ - **No keyword stuffing:** Don't repeat the same phrase unnaturally
86
+
87
+ ### Content Length
88
+ - **Blog posts:** 1500-2500 words is typical for long-form content. long-form articles often run longer because they're deep analytical pieces. Longer is fine if every word earns its place.
89
+ - **Minimum to rank:** 300 words for very simple queries; 1000+ for competitive terms
90
+ - **Quality over quantity:** A tight 800-word post that answers the query completely beats a padded 2000-word post that repeats itself
91
+
92
+ ### Readability
93
+ - Short paragraphs (2-4 sentences for web reading)
94
+ - Bullet points and numbered lists for scannable information
95
+ - Bold key terms for emphasis (sparingly)
96
+ - Clear section breaks with descriptive headings
97
+
98
+ ### Freshness
99
+ - Update dates on evergreen content when significantly revised
100
+ - Add "Last updated" or "Updated" notation for major content refreshes
101
+ - Google favors freshness for certain query types (news, recent events, technology)
102
+
103
+ ## Internal Linking
104
+
105
+ Internal links distribute page authority throughout the site and help crawlers discover content.
106
+
107
+ ### Best Practices
108
+ - **Link to related content:** Every post should link to 2-5 other posts/pages on the same site
109
+ - **Descriptive anchor text:** Use the target topic's keyword as the link text (not "click here" or "read more")
110
+ - **Link to cornerstone content:** Important pillar pages should receive more internal links
111
+ - **Natural placement:** Links should serve the reader — if it genuinely helps to read more about X, link it
112
+ - **Avoid:** Links in navigation that aren't needed, links to the same target with different anchor text, links on every instance of a term
113
+
114
+ ### Platform-specific implementation notes — Patterns
115
+
116
+ **example.com:** Magnus uses [[wikilinks]] in draft which Hugo converts to hyperlinks. Check that wikilinks are rendering as live HTML links and pointing to existing pages.
117
+
118
+ **example.com (Ghost):** Manual internal links in the editor. Verify that linked posts exist and are published.
119
+
120
+ ## Image Optimization
121
+
122
+ ### Alt Text
123
+ - **Purpose:** Accessibility for screen readers + context for search engines (Google Images)
124
+ - **Every image** must have a descriptive alt attribute
125
+ - **Descriptive:** "Close-up of a Portia labiata spider's principal eyes showing the characteristic three-lens system" — not "Portia spider" or "image001.jpg"
126
+ - **Keyword-optimized:** Include relevant keywords naturally when they describe the image
127
+ - **No keyword stuffing:** Alt text is first for accessibility, second for SEO
128
+ - **Decorative images:** alt="" (empty alt) for purely decorative images so screen readers skip them
129
+
130
+ ### File Names
131
+ - Descriptive, hyphenated: `portia-spider-eyes-closeup.jpg` not `IMG_4732.jpg`
132
+ - Include target keyword when appropriate
133
+ - Use hyphens, not underscores
134
+
135
+ ### File Size
136
+ - Compress images before upload (target < 100KB for standard inline images)
137
+ - Use next-gen formats: WebP (with JPEG fallback for older browsers)
138
+ - Hugo: Use `.WebP` processing or serve via CDN that auto-converts
139
+ - Ghost: Compress before uploading — Ghost does minimal image optimization
140
+
141
+ ## URL Structure
142
+
143
+ ### Best Practices
144
+ - **Short, descriptive:** `/seo-audit-ghost-cms/` not `/post/12345/`
145
+ - **Include primary keyword:** When natural
146
+ - **Hyphens, not underscores:** Google treats hyphens as word separators
147
+ - **Lowercase:** /seo-audit not /SEO-Audit
148
+ - **Stop words:** Remove unnecessary "and", "the", "of", "for" where they don't add meaning
149
+ - **Stable:** Once published, never change a URL (breaks all inbound links)
150
+
151
+ ### Platform-specific implementation notes — Patterns
152
+ - **example.com:** Hugo uses the post slug from frontmatter or filename. Verify slug is short and contains primary keyword.
153
+ - **example.com:** Ghost auto-generates slug from title. Set a custom slug in post settings if the auto-generated one is too long or doesn't contain the keyword.
154
+ - **Never change published slugs** without explicit approval from the site owner.
@@ -0,0 +1,30 @@
1
+ # AEO platform guidance
2
+
3
+ ## Google Search AI features
4
+
5
+ Google Search Central says AI Overviews and AI Mode use existing Search systems. Pages need to be indexed and snippet-eligible; there are no additional technical requirements or special AI markup. Continue people-first content, crawlable internal links, textual content, accurate structured data, and Search Console measurement. Google explicitly says `llms.txt`, mandatory chunking, exact long-tail rewrites, and inauthentic mentions are not required for Google Search AI features.
6
+
7
+ ## Bing and Copilot
8
+
9
+ Bing documents AI Performance in Webmaster Tools: total citations, average cited pages, grounding queries, page-level activity, and trends. These are visibility observations, not ranking, authority, placement, or correctness measures. Bing also documents sitemaps, truthful `lastmod`, and IndexNow as discovery/freshness support. Use provider-native definitions and do not generalize dashboard data to all engines.
10
+
11
+ ## OpenAI
12
+
13
+ OpenAI documents separate robots controls for OAI-SearchBot (search), GPTBot (training), and ChatGPT-User (user-triggered actions). Allowing one does not imply allowing the others. Treat published bot names, IP ranges, and propagation timing as version-sensitive.
14
+
15
+ ## Perplexity and other answer providers
16
+
17
+ Use the provider's current crawler and publisher documentation when available. Do not infer search, training, user-fetch, or citation semantics from a user-agent string alone. If documentation is inaccessible or ambiguous, record the gap and avoid a policy change based on guesswork.
18
+
19
+ ## Provider comparison table
20
+
21
+ | Question | Google | Bing | OpenAI | Other providers |
22
+ |---|---|---|---|---|
23
+ | What enables search visibility? | Search indexing and snippet eligibility | Bing indexing/crawl | OAI-SearchBot policy plus provider systems | Provider-specific |
24
+ | Is special AEO markup required? | No current special requirement | No universal requirement established | No universal requirement established | Unknown unless documented |
25
+ | Is `llms.txt` authoritative? | Google says it is ignored for Search | No universal requirement | Provider-specific/undocumented unless stated | Proposal-dependent |
26
+ | What can be measured? | Search Console AI reporting where available | AI Performance | Usually external observation unless provider publishes data | Provider-native or manual |
27
+
28
+ ## Refresh triggers
29
+
30
+ Re-read official pages when a provider changes crawler names, AI surfaces, reporting definitions, robots controls, indexing guidance, or content policies. Record access date and exact scope in `references/source-index.md`.
@@ -0,0 +1,244 @@
1
+ # Schema Markup / Structured Data Reference
2
+
3
+ Structured data helps search engines understand the content of a page and enables rich results in SERPs (FAQ snippets, HowTo steps, breadcrumbs, article previews).
4
+
5
+ ## JSON-LD Format
6
+
7
+ Google's preferred format. Structured data is typically JSON-LD injected through the CMS, application templates, or a supported code-injection mechanism.
8
+
9
+ ### Basic Structure
10
+
11
+ ```json
12
+ {
13
+ "@context": "https://schema.org",
14
+ "@type": "Article",
15
+ "headline": "Title of the Article",
16
+ "description": "150-160 char meta description",
17
+ "author": {
18
+ "@type": "Person",
19
+ "name": "Example Author"
20
+ },
21
+ "datePublished": "2026-05-01",
22
+ "dateModified": "2026-05-15",
23
+ "image": "https://example.com/image.jpg",
24
+ "publisher": {
25
+ "@type": "Organization",
26
+ "name": "Groktopus",
27
+ "logo": {
28
+ "@type": "ImageObject",
29
+ "url": "https://www.example.com/favicon.png"
30
+ }
31
+ }
32
+ }
33
+ ```
34
+
35
+ ## Schema Types for Platform-specific implementation notes
36
+
37
+ ### TechArticle (example.com)
38
+ Use for technical/analytical content about AI, enterprise technology, and engineering.
39
+
40
+ ```json
41
+ {
42
+ "@context": "https://schema.org",
43
+ "@type": "TechArticle",
44
+ "headline": "Article Title",
45
+ "description": "Description",
46
+ "author": {
47
+ "@type": "Person",
48
+ "name": "Example Author"
49
+ },
50
+ "datePublished": "2026-05-01",
51
+ "dateModified": "2026-05-15",
52
+ "proficiencyLevel": "Advanced",
53
+ "about": {
54
+ "@type": "Thing",
55
+ "name": "Topic area"
56
+ }
57
+ }
58
+ ```
59
+
60
+ ### Article / BlogPosting (example.com)
61
+ Use for personal blog and analytical long-form content.
62
+
63
+ ```json
64
+ {
65
+ "@context": "https://schema.org",
66
+ "@type": "BlogPosting",
67
+ "headline": "Title",
68
+ "description": "Description",
69
+ "author": {
70
+ "@type": "Person",
71
+ "name": "Example Author"
72
+ },
73
+ "datePublished": "2026-05-01",
74
+ "dateModified": "2026-05-15"
75
+ }
76
+ ```
77
+
78
+ For articles authored by Jasper:
79
+
80
+ ```json
81
+ {
82
+ "@context": "https://schema.org",
83
+ "@type": "BlogPosting",
84
+ "headline": "Title",
85
+ "description": "Description",
86
+ "author": {
87
+ "@type": "Person",
88
+ "name": "Jasper"
89
+ },
90
+ "datePublished": "2026-05-01",
91
+ "dateModified": "2026-05-15"
92
+ }
93
+ ```
94
+
95
+ ### FAQPage (All Sites)
96
+ Use when the article answers multiple distinct questions. Enables FAQ rich results in SERPs.
97
+
98
+ ```json
99
+ {
100
+ "@context": "https://schema.org",
101
+ "@type": "FAQPage",
102
+ "mainEntity": [
103
+ {
104
+ "@type": "Question",
105
+ "name": "Question 1?",
106
+ "acceptedAnswer": {
107
+ "@type": "Answer",
108
+ "text": "Answer text here."
109
+ }
110
+ },
111
+ {
112
+ "@type": "Question",
113
+ "name": "Question 2?",
114
+ "acceptedAnswer": {
115
+ "@type": "Answer",
116
+ "text": "Answer text here."
117
+ }
118
+ }
119
+ ]
120
+ }
121
+ ```
122
+
123
+ **Requirements for Google rich result eligibility:**
124
+ - Minimum 2 questions
125
+ - Questions must be visible text on the page (not hidden)
126
+ - Each Question must match visible content
127
+ - Answers must be clearly visible to the user (not just in schema)
128
+ - Google may show up to 4 FAQ entries in the SERP
129
+
130
+ ### HowTo (Tutorials, Technical Guides)
131
+ Use for step-by-step guides and tutorials on any site.
132
+
133
+ ```json
134
+ {
135
+ "@context": "https://schema.org",
136
+ "@type": "HowTo",
137
+ "name": "How to Title",
138
+ "description": "Description of the tutorial",
139
+ "step": [
140
+ {
141
+ "@type": "HowToStep",
142
+ "position": 1,
143
+ "name": "Step 1",
144
+ "text": "Description of step 1."
145
+ },
146
+ {
147
+ "@type": "HowToStep",
148
+ "position": 2,
149
+ "name": "Step 2",
150
+ "text": "Description of step 2."
151
+ }
152
+ ]
153
+ }
154
+ ```
155
+
156
+ ### BreadcrumbList (Site Navigation)
157
+ Use on all sites to enable breadcrumb rich results in SERPs.
158
+
159
+ ```json
160
+ {
161
+ "@context": "https://schema.org",
162
+ "@type": "BreadcrumbList",
163
+ "itemListElement": [
164
+ {
165
+ "@type": "ListItem",
166
+ "position": 1,
167
+ "name": "Home",
168
+ "item": "https://www.example.com/"
169
+ },
170
+ {
171
+ "@type": "ListItem",
172
+ "position": 2,
173
+ "name": "Category",
174
+ "item": "https://www.example.com/category/"
175
+ },
176
+ {
177
+ "@type": "ListItem",
178
+ "position": 3,
179
+ "name": "Article Title",
180
+ "item": "https://www.example.com/article-slug/"
181
+ }
182
+ ]
183
+ }
184
+ ```
185
+
186
+ ### Organization (Site-level)
187
+ Use on all sites for site-level schema (injected globally, not per-page).
188
+
189
+ ```json
190
+ {
191
+ "@context": "https://schema.org",
192
+ "@type": "Organization",
193
+ "name": "Site Name",
194
+ "url": "https://www.example.com/",
195
+ "logo": "https://www.example.com/favicon.png",
196
+ "sameAs": [
197
+ "https://twitter.com/username",
198
+ "https://github.com/username"
199
+ ]
200
+ }
201
+ ```
202
+
203
+ ## Platform-Specific Implementation
204
+
205
+ ### Ghost CMS (example.com, example.org, example.net)
206
+
207
+ **Per-page schema:**
208
+ - Ghost injects basic JSON-LD automatically (Article type with headline, dates, author)
209
+ - Custom schema (FAQPage, HowTo, TechArticle) goes in:
210
+ - Post-level: Settings → Code Injection → Post Header (`<script type="application/ld+json">...</script>`)
211
+ - Site-level: Settings → Code Injection → Site Header (BreadcrumbList, Organization)
212
+
213
+ **Verification:**
214
+ - View source → search for `application/ld+json`
215
+ - Test with Google Rich Results Test: https://search.google.com/test/rich-results
216
+ - Test with Schema.org Validator: https://validator.schema.org/
217
+
218
+ **Ghost auto-generated schema limitations:**
219
+ - Ghost only generates Article/BlogPosting schema by default
220
+ - FAQPage, HowTo, TechArticle, BreadcrumbList, Product all require custom injection
221
+ - Author info in Ghost's default schema may need enrichment (add author URL, sameAs)
222
+
223
+ ### Hugo (example.com)
224
+
225
+ **Per-page schema:**
226
+ - Add JSON-LD via Hugo template in `layouts/partials/head.html` or `layouts/_default/single.html`
227
+ - Use Hugo's `.Params` to inject article-specific values
228
+ - Conditional schema: `{{ if .Params.faq }}` for FAQPage, `{{ if .Params.howto }}` for HowTo
229
+
230
+ **Site-level schema:**
231
+ - Organization and BreadcrumbList in the base template (`baseof.html`)
232
+
233
+ ## Validation Checklist
234
+
235
+ - [ ] JSON is valid (no trailing commas, properly closed braces)
236
+ - [ ] Required fields present for each @type
237
+ - [ ] URLs are absolute (including https://)
238
+ - [ ] Dates are in ISO 8601 format (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ)
239
+ - [ ] Author names match the byline
240
+ - [ ] @context is set to "https://schema.org"
241
+ - [ ] No conflicting or duplicate schema on the page
242
+ - [ ] FAQPage content matches visible page content (no hidden answers)
243
+ - [ ] Google Rich Results Test passes without errors
244
+ - [ ] Schema content is visible to users where required (FAQPage, HowTo)
@@ -0,0 +1,36 @@
1
+ # SEO, AEO, and GEO source index
2
+
3
+ This source map supports the skill. Re-check provider documentation before relying on version-sensitive crawler names, dashboards, policies, or controls. Initial research pass: 2026-08-26.
4
+
5
+ ## Primary and standards sources
6
+
7
+ - [Aggarwal et al.: GEO: Generative Engine Optimization](https://arxiv.org/html/2311.09735v3) — KDD 2024 controlled benchmark and generative visibility metrics.
8
+ - [Liu et al.: Evaluating Verifiability in Generative Search Engines](https://arxiv.org/abs/2304.09848) — citation support and sentence support evaluation.
9
+ - [Google: AI features and your website](https://developers.google.com/search/docs/appearance/ai-features) — existing SEO fundamentals, no additional technical requirements or special AI markup, query fan-out, preview controls, and Search Console measurement.
10
+ - [Google: optimizing for generative AI features](https://developers.google.com/search/docs/fundamentals/ai-optimization-guide) — RAG, query fan-out, people-first content, technical structure, and mythbusting for `llms.txt`, chunking, exact rewrites, and inauthentic mentions.
11
+ - [OpenAI: crawler overview](https://platform.openai.com/docs/bots) — OAI-SearchBot for search, GPTBot for training, ChatGPT-User for user-triggered access, independent robots controls, and propagation caveats.
12
+ - [Bing: AI Performance](https://blogs.bing.com/webmaster/February-2026/Introducing-AI-Performance-in-Bing-Webmaster-Tools-Public-Preview) — citation counts, cited pages, grounding queries, page activity, trends, and metric limits.
13
+ - [Bing: sitemaps in AI search](https://blogs.bing.com/webmaster/July-2025/Keeping-Content-Discoverable-with-Sitemaps-in-AI-Powered-Search) — sitemap coverage, truthful `lastmod`, and IndexNow as discovery/freshness aids without an inclusion guarantee.
14
+ - [Perplexity: crawlers](https://docs.perplexity.ai/docs/resources/perplexity-crawlers) — provider crawler and robots guidance; verify directly when implementation depends on details.
15
+ - [Schema.org FAQPage](https://schema.org/FAQPage), [HowTo](https://schema.org/HowTo), and [FAQ](https://schema.org/docs/faq.html) — vocabulary semantics, not a citation guarantee.
16
+ - [IETF RFC 9309](https://datatracker.ietf.org/doc/html/rfc9309) — Robots Exclusion Protocol.
17
+ - [Sitemaps protocol](https://www.sitemaps.org/protocol.html) — XML sitemap format.
18
+ - [llms.txt proposal](https://llmstxt.org/) and [repository](https://github.com/AnswerDotAI/llms-txt) — optional community proposal; Google says it does not use it for Google Search visibility.
19
+
20
+ ## Secondary methodology sources
21
+
22
+ - [Graphite / Ethan Smith](https://graphite.io/five-percent/aeo-is-the-new-seo) — hypothesis generation and test/reproduce framing.
23
+ - [AirOps AEO guide](https://www.airops.com/blog/aeo-answer-engine-optimization) — practitioner tactics and vendor-reported study claims.
24
+ - [Frase AEO guide](https://www.frase.io/blog/what-is-answer-engine-optimization-the-complete-guide-to-getting-cited-by-ai) — practical prompt baselines and citation tracking ideas.
25
+ - [CXL AEO guide](https://cxl.com/blog/answer-engine-optimization-aeo-the-comprehensive-guide/) — secondary taxonomy and implementation discussion.
26
+
27
+ ## Rejected or bounded claims
28
+
29
+ - There is one universal AEO algorithm.
30
+ - FAQPage has a fixed citation multiplier.
31
+ - `llms.txt` improves Google AI visibility.
32
+ - Allowing every crawler guarantees citations.
33
+ - More short pages, exact-match questions, or web mentions always win.
34
+ - Citation count equals authority, ranking, correctness, traffic, or conversions.
35
+
36
+ These are unsupported, provider-specific, vendor-reported without portable evidence, or contradicted by current primary guidance.
@@ -0,0 +1,56 @@
1
+ # AEO structured data
2
+
3
+ ## Principle
4
+
5
+ Schema.org describes content; it does not guarantee inclusion, ranking, or citation. Add JSON-LD only when the page visibly and materially satisfies the chosen type. Visible content is the source of truth. Provider rich-result support changes over time, so do not treat older FAQ-focused guidance or a schema type's existence as evidence of current Google eligibility.
6
+
7
+ ## Type selection
8
+
9
+ - **Article/BlogPosting/TechArticle:** an authored article; include accurate headline, author, dates, publisher, and about fields.
10
+ - **FAQPage:** a page presenting real frequently asked questions and answers. Do not use it for implied answers or every heading.
11
+ - **HowTo:** a procedure with ordered steps, tools/supplies, and conditions. Do not use it for explanatory prose.
12
+ - **QAPage:** a user question with user-submitted answers, not a publisher FAQ.
13
+ - **Organization/Person:** identity and authorship only when the page and site can substantiate it.
14
+ - **BreadcrumbList:** navigational hierarchy, not a substitute for internal links.
15
+
16
+ Use the Schema.org type definition and the target provider's feature documentation. Schema.org's vocabulary is broader than any one search feature's eligibility rules.
17
+
18
+ ## Parity checklist
19
+
20
+ For each JSON-LD block:
21
+
22
+ - every material name, answer, step, date, author, URL, and relationship appears visibly or is a faithful machine-readable equivalent;
23
+ - FAQ answers are complete enough to stand alone and match their visible wording;
24
+ - HowTo steps are ordered, actionable, and visible;
25
+ - dates describe publication or real modification, not deployment time;
26
+ - URLs are canonical and fetchable;
27
+ - no hidden or contradictory markup is added to influence systems;
28
+ - the JSON parses and the rendered page remains correct without JavaScript when feasible.
29
+
30
+ ## Validation pattern
31
+
32
+ 1. Parse JSON-LD as JSON.
33
+ 2. Validate required shape for the selected type.
34
+ 3. Extract visible headings, questions, answers, steps, names, and dates.
35
+ 4. Compare material fields, allowing only documented normalization such as whitespace.
36
+ 5. Run the provider's own rich-result or structured-data test where applicable.
37
+ 6. Inspect the rendered page and record what the validator does not prove.
38
+
39
+ A valid JSON document proves syntax. It does not prove truth, visible parity, eligibility, retrieval, or citation.
40
+
41
+ ## Common mistakes
42
+
43
+ - FAQ schema on a page without visible Q&A;
44
+ - HowTo schema on a conceptual article;
45
+ - multiple conflicting author or date values;
46
+ - `sameAs` links chosen from ambiguous search results;
47
+ - using schema to encode a vendor claim as an objective fact;
48
+ - assuming rich-result eligibility is an AEO performance metric;
49
+ - adding every plausible schema type instead of the smallest accurate set.
50
+
51
+ ## Primary references
52
+
53
+ - [Schema.org FAQPage](https://schema.org/FAQPage)
54
+ - [Schema.org HowTo](https://schema.org/HowTo)
55
+ - [Schema.org FAQ](https://schema.org/docs/faq.html)
56
+ - [Google structured data policies](https://developers.google.com/search/docs/appearance/structured-data/sd-policies)
@@ -0,0 +1,99 @@
1
+ # Technical SEO Reference
2
+
3
+ Technical SEO ensures search engines can find, crawl, interpret, and index your content. If the technical foundation is broken, nothing else matters.
4
+
5
+ ## Crawlability & Indexability
6
+
7
+ ### Robots.txt
8
+ - **Purpose:** Directs crawlers which URLs to avoid
9
+ - **Check:** Does the site have a robots.txt at `/robots.txt`?
10
+ - **Check:** Are important pages accidentally disallowed? `Disallow: /` blocks ALL crawlers
11
+ - **Check:** Is the sitemap referenced? `Sitemap: https://example.com/sitemap.xml`
12
+ - **Best practice:** Allow CSS/JS files (modern crawlers need them for rendering)
13
+ - **Hosted CMS sites:** Ghost CMS auto-generates robots.txt; verify after any config change
14
+
15
+ ### XML Sitemaps
16
+ - **Purpose:** Tells crawlers about all pages and their relative importance
17
+ - **Check:** Does the sitemap exist and is it referenced in robots.txt?
18
+ - **Check:** Are only canonical URLs included? (No pagination params, sort filters, etc.)
19
+ - **Check:** Are noindex pages excluded from the sitemap?
20
+ - **Check:** Lastmod dates are accurate (not all the same date)
21
+ - **Ghost split sitemaps:** Ghost generates `sitemap-posts.xml`, `sitemap-pages.xml`, `sitemap-tags.xml`, `sitemap-authors.xml`. Verify each is present and valid.
22
+ - **Hugo:** Verify sitemap.xml is generated with correct `changefreq` and `priority` settings
23
+
24
+ ### Canonical URLs
25
+ - **Purpose:** Tells search engines which URL is the authoritative version of a page
26
+ - **Check:** Every page has a self-referencing canonical or points to the canonical version
27
+ - **Check:** No conflicting canonicals (page A canonicals to B, B canonicals to C)
28
+ - **Common issues:** HTTP/HTTPS duplication (canonical must use HTTPS if site is HTTPS), www/non-www duplication, trailing slash inconsistency
29
+ - **Ghost:** Canonical is auto-generated from the post/page slug. Verify no slug changes break inbound canonical signals.
30
+
31
+ ### Meta Robots / Noindex
32
+ - **Purpose:** Prevents indexing of specific pages
33
+ - **Check:** Pages that should be indexed don't have `<meta name="robots" content="noindex">`
34
+ - **Check:** Thin pages (tag pages, author pages, pagination) have noindex if they shouldn't rank
35
+ - **Check:** Login/admin pages have noindex
36
+
37
+ ## Page Speed
38
+
39
+ ### Core Web Vitals (Google's ranking signals)
40
+ - **LCP (Largest Contentful Paint):** < 2.5s (good), 2.5-4.0s (needs improvement), > 4.0s (poor)
41
+ - **FID (First Input Delay) / INP (Interaction to Next Paint):** < 100ms (good), 100-300ms (needs improvement), > 300ms (poor)
42
+ - **CLS (Cumulative Layout Shift):** < 0.1 (good), 0.1-0.25 (needs improvement), > 0.25 (poor)
43
+
44
+ ### Common Fixes by Platform
45
+
46
+ **Ghost CMS:**
47
+ - Enable lazy loading for images (Ghost 5+ has built-in)
48
+ - Use a CDN for image delivery (Ghost Pro includes; self-hosted needs Cloudflare or similar)
49
+ - Limit the number of visible posts on home/tag pages (paginate aggressively)
50
+ - Disable unused Ghost integrations and background tasks
51
+ - Verify the theme isn't loading unused CSS/JS (many Ghost themes are bloated)
52
+
53
+ **Hugo (example.com):**
54
+ - Hugo generates static HTML — inherently fast
55
+ - Image processing: use Hugo's built-in image processing to serve appropriately sized images (`.Resize`, `.Fill`, `.Fit`)
56
+ - Minify HTML output: `minify: true` in config
57
+ - Avoid excessive JavaScript (Hugo sites shouldn't need much JS)
58
+ - Verify CSS is not render-blocking (inline critical CSS if needed)
59
+
60
+ ### Tools for Measurement
61
+ - Google PageSpeed Insights (lab + field data)
62
+ - Lighthouse (Chrome DevTools)
63
+ - Web Vitals library (RUM data)
64
+ - GTmetrix / Pingdom (third-party)
65
+
66
+ ## Mobile-Friendliness
67
+
68
+ - **Check:** Responsive design — does the site render correctly at all viewport widths?
69
+ - **Check:** Viewport meta tag present: `<meta name="viewport" content="width=device-width, initial-scale=1">`
70
+ - **Check:** Font sizes are readable on mobile (min 16px body text recommended)
71
+ - **Check:** Tap targets are adequately sized (min 48x48px recommended)
72
+ - **Check:** Content not hidden behind unplayable media or unsupported formats
73
+ - **Test:** Google's Mobile-Friendly Test
74
+
75
+ ## HTTPS & Security
76
+
77
+ - **Check:** Valid SSL certificate (not expired, not self-signed)
78
+ - **Check:** All resources load over HTTPS (no mixed content warnings)
79
+ - **Check:** HSTS header present for repeat visitors (Strict-Transport-Security)
80
+ - **Check:** Redirects HTTP → HTTPS (301 permanent redirect)
81
+ - **Check:** No security warnings in browser (mixed content, invalid cert)
82
+
83
+ ## International SEO (If Applicable)
84
+
85
+ - **hreflang tags:** Correctly implemented for multi-language/multi-region sites
86
+ - **Check:** Self-referencing hreflang (each page includes its own language tag as well)
87
+ - **Check:** No conflicting signals (hreflang says X, redirect says Y)
88
+
89
+ ## Ghost-Specific Technical SEO
90
+
91
+ | Check | Where to look | Action |
92
+ |-------|---------------|--------|
93
+ | Canonical URLs | Post settings → canonical URL | Verify self-referencing or correct canonical |
94
+ | Meta robots | Code injection → per-page | No thin pages indexed |
95
+ | Sitemap | `/sitemap.xml` | Verify split sitemaps present |
96
+ | Robots.txt | `/robots.txt` | Verify sitemaps referenced, no accidental disallows |
97
+ | Structured data | Source HTML → JSON-LD | Verify Ghost's built-in JSON-LD is correct + any custom |
98
+ | AMP | Ghost settings | Verify AMP is enabled/disabled intentionally (Ghost defaults to disabled in v5+) |
99
+ | Open Graph / Twitter Cards | Post social settings | Verify Facebook and Twitter card previews |