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,360 @@
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: marketplace
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: WebSite
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: medium
81
+ queries:
82
+ - "what is {{primary_keyword}}"
83
+ - "how does {{primary_keyword}} work"
84
+
85
+ comparison:
86
+ priority: high
87
+ queries:
88
+ {{competitors_comparison_queries}}
89
+ - "best {{primary_keyword}} for startups"
90
+
91
+ transactional:
92
+ priority: critical
93
+ queries:
94
+ - "is {{brand_lower}} worth it"
95
+ - "should I use {{brand_lower}}"
96
+ - "{{brand_lower}} pricing"
97
+
98
+ reputational:
99
+ priority: high
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: marketplace
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: listing
160
+ url: /listings/[slug]
161
+ primary_keyword: null
162
+ status: planned
163
+ priority: 2
164
+
165
+ - id: category
166
+ url: /[category]
167
+ primary_keyword: null
168
+ status: planned
169
+ priority: 3
170
+
171
+ - id: seller-profile
172
+ url: /sellers/[slug]
173
+ primary_keyword: null
174
+ status: planned
175
+ priority: 4
176
+
177
+ - id: search-results
178
+ url: /search
179
+ primary_keyword: null
180
+ status: planned
181
+ priority: 5
182
+
183
+ - id: how-it-works
184
+ url: /how-it-works
185
+ primary_keyword: null
186
+ status: planned
187
+ priority: 6
188
+
189
+ - id: pricing
190
+ url: /pricing
191
+ primary_keyword: null
192
+ status: planned
193
+ priority: 7
194
+
195
+ - id: trust-safety
196
+ url: /trust
197
+ primary_keyword: null
198
+ status: planned
199
+ priority: 8
200
+
201
+ ### PLATFORM WRITES BACK
202
+
203
+ _analysis:
204
+ source: null
205
+ last_analyzed: null
206
+ pages: []
207
+ missing_pages: []
208
+ build_order_recommendation: []
209
+
210
+ ## Copy
211
+
212
+ copy:
213
+
214
+ ### FOUNDER DECLARES
215
+
216
+ h1_contains_primary_keyword: true
217
+ meta_description_length: 150-160
218
+ meta_description_includes_cta: true
219
+ min_word_count:
220
+ homepage: 800
221
+ feature_page: 600
222
+ blog_post: 1200
223
+ comparison_page: 1500
224
+ reading_level: 8 # grade level target
225
+
226
+ ## Structure
227
+
228
+ structure:
229
+
230
+ ### FOUNDER DECLARES
231
+
232
+ answer_first: true # direct answer in first 50 words
233
+ faq_section_required: true # on all key pages
234
+ faq_minimum_questions: 6
235
+ statistics_per_page: 2 # minimum data points with sources
236
+ citations_required: true # link to primary sources
237
+ short_paragraphs: true # max 3 sentences
238
+ heading_hierarchy: strict # H1 > H2 > H3, no skipping
239
+
240
+ ## Authority
241
+
242
+ authority:
243
+
244
+ ### FOUNDER DECLARES
245
+
246
+ cite_sources: true
247
+ expert_quotes: false # set true when you have quotes
248
+ eeat_signals:
249
+ experience: null # describe your experience signal
250
+ expertise: null # describe your expertise signal
251
+ authority: null # describe your authority signal
252
+ trust: null # describe your trust signal
253
+
254
+ ## Schema
255
+
256
+ schema:
257
+
258
+ ### FOUNDER DECLARES
259
+
260
+ types:
261
+ - WebSite
262
+ - Organization
263
+ - FAQPage
264
+ - Product
265
+ faq_schema: true
266
+ breadcrumb_schema: true
267
+ organization_schema: true
268
+
269
+ ## Crawl
270
+
271
+ crawl:
272
+
273
+ ### FOUNDER DECLARES
274
+
275
+ sitemap: /sitemap.xml
276
+ robots_txt: /robots.txt
277
+ allow_ai_bots: true
278
+ allowed_bots:
279
+ - Googlebot
280
+ - Bingbot
281
+ - PerplexityBot
282
+ - ChatGPT-User
283
+ - GPTBot
284
+ - ClaudeBot
285
+ - anthropic-ai
286
+ - cohere-ai
287
+ disallow:
288
+ - /admin
289
+ - /checkout
290
+ - /user/*
291
+ - /api/*
292
+
293
+ ## Performance
294
+
295
+ performance:
296
+
297
+ ### FOUNDER DECLARES
298
+
299
+ lcp: 2.5s
300
+ cls: 0.1
301
+ fid: 100ms
302
+ page_size: 500kb
303
+ ttfb: 800ms
304
+
305
+ ## AEO
306
+
307
+ aeo:
308
+
309
+ ### FOUNDER DECLARES
310
+
311
+ ### AI Engine Optimization rules
312
+
313
+ answer_first_format: true
314
+ faq_on_all_key_pages: true
315
+ structured_data_priority: high
316
+ content_freshness_target: 30d # update key pages within 30 days
317
+ competitors_to_monitor:
318
+ {{competitors_to_monitor}}
319
+
320
+ ### PLATFORM WRITES BACK
321
+
322
+ _analysis:
323
+ source: null
324
+ overall_citation_rate: null
325
+ overall_gap_score: null
326
+ engines_tracked:
327
+ - chatgpt
328
+ - perplexity
329
+ - claude
330
+ - gemini
331
+ - grok
332
+ last_analyzed: null
333
+ next_analysis: null
334
+
335
+ ## Monitoring
336
+
337
+ monitoring:
338
+
339
+ ### FOUNDER DECLARES
340
+
341
+ sync_schedule: monthly # monthly | weekly | on_demand
342
+ auto_commit: false # platform commits directly to repo
343
+ pr_mode: true # open PR instead of direct commit
344
+ branch: main
345
+ alert_on_gap_score_above: 80 # alert when gap score exceeds threshold
346
+ alert_on_citation_drop: true # alert if citation rate drops
347
+
348
+ ## Platform Connection
349
+
350
+ ### Connect at <https://seomd.dev/connect>
351
+
352
+ ### Add SEOMD_API_KEY to your .env file
353
+
354
+ ### Never commit your API key to version control
355
+
356
+ platform:
357
+ provider: null # foxcite | manual | ahrefs | semrush
358
+ project_id: null
359
+
360
+ ### api_key: loaded from SEOMD_API_KEY environment variable
@@ -0,0 +1,268 @@
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
+ ### Features
58
+
59
+ - id: features
60
+ url: /features
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
+ ### Pricing
81
+
82
+ - id: pricing
83
+ url: /pricing
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
+ ### Comparison
104
+
105
+ - id: comparison
106
+ url: /vs/[competitor]
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
+ ### Alternatives
127
+
128
+ - id: alternatives
129
+ url: /alternatives/[competitor]
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
+ ### Use-cases
150
+
151
+ - id: use-cases
152
+ url: /for/[segment]
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
+ ### Integrations
173
+
174
+ - id: integrations
175
+ url: /integrations
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
+ ### Changelog
196
+
197
+ - id: changelog
198
+ url: /changelog
199
+ status: planned
200
+ citation_rate: null
201
+ gap_score: null
202
+ top_cited_competitor: null
203
+
204
+ why_page_won: []
205
+ citation_hooks: []
206
+
207
+ gaps_for_{{brand_lower_snake}}: []
208
+
209
+ remediation_playbook: []
210
+
211
+ fastest_win:
212
+ action: null
213
+ estimated_gap_score_improvement: null
214
+ effort: null
215
+
216
+ suggested_content_outline: []
217
+
218
+ ### Docs
219
+
220
+ - id: docs
221
+ url: /docs
222
+ status: planned
223
+ citation_rate: null
224
+ gap_score: null
225
+ top_cited_competitor: null
226
+
227
+ why_page_won: []
228
+ citation_hooks: []
229
+
230
+ gaps_for_{{brand_lower_snake}}: []
231
+
232
+ remediation_playbook: []
233
+
234
+ fastest_win:
235
+ action: null
236
+ estimated_gap_score_improvement: null
237
+ effort: null
238
+
239
+ suggested_content_outline: []
240
+
241
+ ### Blog
242
+
243
+ - id: blog
244
+ url: /blog
245
+ status: planned
246
+ citation_rate: null
247
+ gap_score: null
248
+ top_cited_competitor: null
249
+
250
+ why_page_won: []
251
+ citation_hooks: []
252
+
253
+ gaps_for_{{brand_lower_snake}}: []
254
+
255
+ remediation_playbook: []
256
+
257
+ fastest_win:
258
+ action: null
259
+ estimated_gap_score_improvement: null
260
+ effort: null
261
+
262
+ suggested_content_outline: []
263
+
264
+ ## Competitor Profiles
265
+ ### Platform populated — competitor citation patterns
266
+
267
+ competitors:
268
+ {{reverse_competitors}}