seomd-cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,348 @@
1
+ # SEO.md
2
+
3
+ ## {{brand}}
4
+
5
+ ### spec v1.0 | <https://seomd.dev>
6
+
7
+ #### generated: {{date}}
8
+
9
+ ## FIELD OWNERSHIP
10
+
11
+ ### no prefix = founder declares (you own this)
12
+
13
+ ### _analysis: = platform writes back (do not edit manually)
14
+
15
+ ## Site
16
+
17
+ site:
18
+ type: blog
19
+ domain: {{domain}}
20
+ canonical: https://{{domain}}
21
+ locale: en-US
22
+ launched: null # YYYY-MM-DD
23
+
24
+ ## Identity
25
+
26
+ identity:
27
+ brand: "{{brand}}"
28
+ tagline: null
29
+ social:
30
+ twitter: null
31
+ linkedin: null
32
+ github: null
33
+ schema_org_type: Organization
34
+
35
+ ## Keywords
36
+
37
+ keywords:
38
+
39
+ ### FOUNDER DECLARES
40
+
41
+ primary: "{{primary_keyword}}"
42
+ secondary: [] # add your secondary keywords
43
+ negative: # terms that dilute your intent signal
44
+ - "free"
45
+ - "tutorial"
46
+ - "how to"
47
+ competitor_terms:
48
+ {{competitor_terms}}
49
+ category_terms: # unbranded category queries
50
+ - "best {{primary_keyword}}"
51
+ - "top {{primary_keyword}} tools"
52
+ long_tail: [] # add long-tail variations
53
+ seasonal: null # add seasonal terms if applicable
54
+
55
+ ### PLATFORM WRITES BACK
56
+
57
+ _analysis:
58
+ source: null
59
+ primary_search_volume: null
60
+ primary_intent_type: null
61
+ primary_trend: null
62
+ recommended_secondary: []
63
+ negative_additions_suggested: []
64
+ last_analyzed: null
65
+ next_analysis: null
66
+
67
+ ## Intent
68
+
69
+ intent:
70
+
71
+ ### FOUNDER DECLARES
72
+
73
+ #### Add queries your buyers actually type into AI engines
74
+
75
+ #### Tip: think about what someone asks ChatGPT or Perplexity
76
+
77
+ #### when they are looking for a solution like yours
78
+
79
+ informational:
80
+ priority: critical
81
+ queries:
82
+ - "what is {{primary_keyword}}"
83
+ - "how does {{primary_keyword}} work"
84
+
85
+ comparison:
86
+ priority: medium
87
+ queries:
88
+ {{competitors_comparison_queries}}
89
+ - "best {{primary_keyword}} for startups"
90
+
91
+ transactional:
92
+ priority: low
93
+ queries:
94
+ - "is {{brand_lower}} worth it"
95
+ - "should I use {{brand_lower}}"
96
+ - "{{brand_lower}} pricing"
97
+
98
+ reputational:
99
+ priority: medium
100
+ queries:
101
+ - "{{brand_lower}} reviews"
102
+ - "is {{brand_lower}} legit"
103
+ - "{{brand_lower}} problems"
104
+
105
+ category:
106
+ priority: high
107
+ queries:
108
+ - "best {{primary_keyword}}"
109
+ - "top {{primary_keyword}} 2026"
110
+
111
+ ### PLATFORM WRITES BACK
112
+
113
+ _analysis:
114
+ source: null
115
+ last_analyzed: null
116
+ next_analysis: null
117
+ informational:
118
+ citation_rate: null
119
+ top_cited_competitor: null
120
+ gap_score: null
121
+ trend: null
122
+ comparison:
123
+ citation_rate: null
124
+ top_cited_competitor: null
125
+ gap_score: null
126
+ trend: null
127
+ transactional:
128
+ citation_rate: null
129
+ top_cited_competitor: null
130
+ gap_score: null
131
+ trend: null
132
+ reputational:
133
+ citation_rate: null
134
+ top_cited_competitor: null
135
+ gap_score: null
136
+ trend: null
137
+ category:
138
+ citation_rate: null
139
+ top_cited_competitor: null
140
+ gap_score: null
141
+ trend: null
142
+
143
+ ## Pages
144
+
145
+ pages:
146
+ site_type: blog
147
+
148
+ ### FOUNDER DECLARES
149
+
150
+ #### status: live | draft | planned
151
+
152
+ required:
153
+ - id: homepage
154
+ url: /
155
+ primary_keyword: null
156
+ status: planned
157
+ priority: 1
158
+
159
+ - id: category
160
+ url: /[category]
161
+ primary_keyword: null
162
+ status: planned
163
+ priority: 2
164
+
165
+ - id: article
166
+ url: /[category]/[slug]
167
+ primary_keyword: null
168
+ status: planned
169
+ priority: 3
170
+
171
+ - id: author
172
+ url: /author/[slug]
173
+ primary_keyword: null
174
+ status: planned
175
+ priority: 4
176
+
177
+ - id: about
178
+ url: /about
179
+ primary_keyword: null
180
+ status: planned
181
+ priority: 5
182
+
183
+ - id: newsletter
184
+ url: /newsletter
185
+ primary_keyword: null
186
+ status: planned
187
+ priority: 6
188
+
189
+ ### PLATFORM WRITES BACK
190
+
191
+ _analysis:
192
+ source: null
193
+ last_analyzed: null
194
+ pages: []
195
+ missing_pages: []
196
+ build_order_recommendation: []
197
+
198
+ ## Copy
199
+
200
+ copy:
201
+
202
+ ### FOUNDER DECLARES
203
+
204
+ h1_contains_primary_keyword: true
205
+ meta_description_length: 150-160
206
+ meta_description_includes_cta: true
207
+ min_word_count:
208
+ homepage: 800
209
+ feature_page: 600
210
+ blog_post: 1200
211
+ comparison_page: 1500
212
+ reading_level: 8 # grade level target
213
+
214
+ ## Structure
215
+
216
+ structure:
217
+
218
+ ### FOUNDER DECLARES
219
+
220
+ answer_first: true # direct answer in first 50 words
221
+ faq_section_required: true # on all key pages
222
+ faq_minimum_questions: 6
223
+ statistics_per_page: 2 # minimum data points with sources
224
+ citations_required: true # link to primary sources
225
+ short_paragraphs: true # max 3 sentences
226
+ heading_hierarchy: strict # H1 > H2 > H3, no skipping
227
+
228
+ ## Authority
229
+
230
+ authority:
231
+
232
+ ### FOUNDER DECLARES
233
+
234
+ cite_sources: true
235
+ expert_quotes: false # set true when you have quotes
236
+ eeat_signals:
237
+ experience: null # describe your experience signal
238
+ expertise: null # describe your expertise signal
239
+ authority: null # describe your authority signal
240
+ trust: null # describe your trust signal
241
+
242
+ ## Schema
243
+
244
+ schema:
245
+
246
+ ### FOUNDER DECLARES
247
+
248
+ types:
249
+ - Article
250
+ - Person
251
+ - FAQPage
252
+ - BreadcrumbList
253
+ faq_schema: true
254
+ breadcrumb_schema: true
255
+ organization_schema: true
256
+
257
+ ## Crawl
258
+
259
+ crawl:
260
+
261
+ ### FOUNDER DECLARES
262
+
263
+ sitemap: /sitemap.xml
264
+ robots_txt: /robots.txt
265
+ allow_ai_bots: true
266
+ allowed_bots:
267
+ - Googlebot
268
+ - Bingbot
269
+ - PerplexityBot
270
+ - ChatGPT-User
271
+ - GPTBot
272
+ - ClaudeBot
273
+ - anthropic-ai
274
+ - cohere-ai
275
+ disallow:
276
+ - /admin
277
+ - /checkout
278
+ - /user/*
279
+ - /api/*
280
+
281
+ ## Performance
282
+
283
+ performance:
284
+
285
+ ### FOUNDER DECLARES
286
+
287
+ lcp: 2.5s
288
+ cls: 0.1
289
+ fid: 100ms
290
+ page_size: 500kb
291
+ ttfb: 800ms
292
+
293
+ ## AEO
294
+
295
+ aeo:
296
+
297
+ ### FOUNDER DECLARES
298
+
299
+ ### AI Engine Optimization rules
300
+
301
+ answer_first_format: true
302
+ faq_on_all_key_pages: true
303
+ structured_data_priority: high
304
+ content_freshness_target: 30d # update key pages within 30 days
305
+ competitors_to_monitor:
306
+ {{competitors_to_monitor}}
307
+
308
+ ### PLATFORM WRITES BACK
309
+
310
+ _analysis:
311
+ source: null
312
+ overall_citation_rate: null
313
+ overall_gap_score: null
314
+ engines_tracked:
315
+ - chatgpt
316
+ - perplexity
317
+ - claude
318
+ - gemini
319
+ - grok
320
+ last_analyzed: null
321
+ next_analysis: null
322
+
323
+ ## Monitoring
324
+
325
+ monitoring:
326
+
327
+ ### FOUNDER DECLARES
328
+
329
+ sync_schedule: monthly # monthly | weekly | on_demand
330
+ auto_commit: false # platform commits directly to repo
331
+ pr_mode: true # open PR instead of direct commit
332
+ branch: main
333
+ alert_on_gap_score_above: 80 # alert when gap score exceeds threshold
334
+ alert_on_citation_drop: true # alert if citation rate drops
335
+
336
+ ## Platform Connection
337
+
338
+ ### Connect at <https://seomd.dev/connect>
339
+
340
+ ### Add SEOMD_API_KEY to your .env file
341
+
342
+ ### Never commit your API key to version control
343
+
344
+ platform:
345
+ provider: null # foxcite | manual | ahrefs | semrush
346
+ project_id: null
347
+
348
+ ### api_key: loaded from SEOMD_API_KEY environment variable
@@ -0,0 +1,199 @@
1
+ # SEO.REVERSE.md
2
+
3
+ ## {{brand}}
4
+
5
+ ### spec v1.0 | https://seomd.dev
6
+
7
+ #### generated: {{date}}
8
+
9
+ ## This file is generated by the {{brand}} platform.
10
+ ### Do not edit manually — run `npx seomd analyze` to update.
11
+ ### Run `npx seomd sync` to pull latest intelligence.
12
+
13
+ ## Each page section contains a full reverse engineer analysis:
14
+
15
+ ### why_page_won — what the top cited competitor does right
16
+ ### citation_hooks — specific patterns to replicate
17
+ ### gaps_for_brand — where your page falls short
18
+ ### remediation_playbook — step by step fixes with effort/impact
19
+ ### fastest_win — highest ROI action to take now
20
+ ### suggested_content_outline — ready to use outline for your writer/AI
21
+
22
+ domain: {{domain}}
23
+ brand: "{{brand}}"
24
+ primary_competitor: {{primary_competitor}}
25
+ last_analyzed: null
26
+ next_analysis: null
27
+ source: null
28
+
29
+ ## Pages
30
+ ### Run `npx seomd analyze` to populate these sections
31
+
32
+ pages:
33
+
34
+ ### Homepage
35
+
36
+ - id: homepage
37
+ url: /
38
+ status: planned
39
+ citation_rate: null
40
+ gap_score: null
41
+ top_cited_competitor: null
42
+
43
+ why_page_won: []
44
+ citation_hooks: []
45
+
46
+ gaps_for_{{brand_lower_snake}}: []
47
+
48
+ remediation_playbook: []
49
+
50
+ fastest_win:
51
+ action: null
52
+ estimated_gap_score_improvement: null
53
+ effort: null
54
+
55
+ suggested_content_outline: []
56
+
57
+ ### Category
58
+
59
+ - id: category
60
+ url: /[category]
61
+ status: planned
62
+ citation_rate: null
63
+ gap_score: null
64
+ top_cited_competitor: null
65
+
66
+ why_page_won: []
67
+ citation_hooks: []
68
+
69
+ gaps_for_{{brand_lower_snake}}: []
70
+
71
+ remediation_playbook: []
72
+
73
+ fastest_win:
74
+ action: null
75
+ estimated_gap_score_improvement: null
76
+ effort: null
77
+
78
+ suggested_content_outline: []
79
+
80
+ ### Product
81
+
82
+ - id: product
83
+ url: /products/[slug]
84
+ status: planned
85
+ citation_rate: null
86
+ gap_score: null
87
+ top_cited_competitor: null
88
+
89
+ why_page_won: []
90
+ citation_hooks: []
91
+
92
+ gaps_for_{{brand_lower_snake}}: []
93
+
94
+ remediation_playbook: []
95
+
96
+ fastest_win:
97
+ action: null
98
+ estimated_gap_score_improvement: null
99
+ effort: null
100
+
101
+ suggested_content_outline: []
102
+
103
+ ### Collection
104
+
105
+ - id: collection
106
+ url: /collections/[slug]
107
+ status: planned
108
+ citation_rate: null
109
+ gap_score: null
110
+ top_cited_competitor: null
111
+
112
+ why_page_won: []
113
+ citation_hooks: []
114
+
115
+ gaps_for_{{brand_lower_snake}}: []
116
+
117
+ remediation_playbook: []
118
+
119
+ fastest_win:
120
+ action: null
121
+ estimated_gap_score_improvement: null
122
+ effort: null
123
+
124
+ suggested_content_outline: []
125
+
126
+ ### Reviews
127
+
128
+ - id: reviews
129
+ url: /reviews
130
+ status: planned
131
+ citation_rate: null
132
+ gap_score: null
133
+ top_cited_competitor: null
134
+
135
+ why_page_won: []
136
+ citation_hooks: []
137
+
138
+ gaps_for_{{brand_lower_snake}}: []
139
+
140
+ remediation_playbook: []
141
+
142
+ fastest_win:
143
+ action: null
144
+ estimated_gap_score_improvement: null
145
+ effort: null
146
+
147
+ suggested_content_outline: []
148
+
149
+ ### Cart
150
+
151
+ - id: cart
152
+ url: /cart
153
+ status: planned
154
+ citation_rate: null
155
+ gap_score: null
156
+ top_cited_competitor: null
157
+
158
+ why_page_won: []
159
+ citation_hooks: []
160
+
161
+ gaps_for_{{brand_lower_snake}}: []
162
+
163
+ remediation_playbook: []
164
+
165
+ fastest_win:
166
+ action: null
167
+ estimated_gap_score_improvement: null
168
+ effort: null
169
+
170
+ suggested_content_outline: []
171
+
172
+ ### Checkout
173
+
174
+ - id: checkout
175
+ url: /checkout
176
+ status: planned
177
+ citation_rate: null
178
+ gap_score: null
179
+ top_cited_competitor: null
180
+
181
+ why_page_won: []
182
+ citation_hooks: []
183
+
184
+ gaps_for_{{brand_lower_snake}}: []
185
+
186
+ remediation_playbook: []
187
+
188
+ fastest_win:
189
+ action: null
190
+ estimated_gap_score_improvement: null
191
+ effort: null
192
+
193
+ suggested_content_outline: []
194
+
195
+ ## Competitor Profiles
196
+ ### Platform populated — competitor citation patterns
197
+
198
+ competitors:
199
+ {{reverse_competitors}}