@piramilan/seo-expert 0.2.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,300 @@
1
+ #!/usr/bin/env node
2
+ // SEO Expert — npx installer
3
+ // Zero runtime dependencies. Node >= 18.
4
+
5
+ import fs from 'node:fs';
6
+ import path from 'node:path';
7
+ import os from 'node:os';
8
+ import readline from 'node:readline/promises';
9
+ import { fileURLToPath } from 'node:url';
10
+ import { spawnSync } from 'node:child_process';
11
+
12
+ const __filename = fileURLToPath(import.meta.url);
13
+ const __dirname = path.dirname(__filename);
14
+ const ROOT = path.resolve(__dirname, '..');
15
+ const PKG = JSON.parse(fs.readFileSync(path.join(ROOT, 'package.json'), 'utf8'));
16
+
17
+ // --- ANSI helpers (no chalk) ---------------------------------------------
18
+ const tty = process.stdout.isTTY;
19
+ const c = tty ? {
20
+ reset: '\x1b[0m', bold: '\x1b[1m', dim: '\x1b[2m',
21
+ blue: '\x1b[34m', green: '\x1b[32m', yellow: '\x1b[33m', red: '\x1b[31m', gray: '\x1b[90m',
22
+ } : { reset: '', bold: '', dim: '', blue: '', green: '', yellow: '', red: '', gray: '' };
23
+
24
+ const log = (m = '') => process.stdout.write(m + '\n');
25
+ const errf = (m) => process.stderr.write(c.red + 'error: ' + c.reset + m + '\n');
26
+ const ok = (m) => log(c.green + '✓ ' + c.reset + m);
27
+ const warn = (m) => log(c.yellow + '! ' + c.reset + m);
28
+ const head = (m) => log('\n' + c.bold + m + c.reset);
29
+
30
+ // --- Tool registry --------------------------------------------------------
31
+ // kind:
32
+ // "rules-file" → copy a single source file to a target path in cwd
33
+ // "skill-dir" → copy a directory tree into ~/.claude/skills/<name>/
34
+ // "paste-adapter" → copy adapter content to clipboard and print steps
35
+ const TOOLS = {
36
+ cursor: {
37
+ label: 'Cursor',
38
+ kind: 'rules-file',
39
+ target: '.cursorrules',
40
+ source: 'adapters/coding-agent-rules.md',
41
+ note: 'AI-pair-programming editor',
42
+ },
43
+ cline: {
44
+ label: 'Cline',
45
+ kind: 'rules-file',
46
+ target: '.clinerules',
47
+ source: 'adapters/coding-agent-rules.md',
48
+ note: 'VS Code agent',
49
+ },
50
+ windsurf: {
51
+ label: 'Windsurf',
52
+ kind: 'rules-file',
53
+ target: '.windsurfrules',
54
+ source: 'adapters/coding-agent-rules.md',
55
+ note: 'Codeium AI editor',
56
+ },
57
+ aider: {
58
+ label: 'Aider',
59
+ kind: 'rules-file',
60
+ target: 'CONVENTIONS.md',
61
+ source: 'adapters/coding-agent-rules.md',
62
+ note: 'CLI coding agent — pass with `aider --read CONVENTIONS.md`',
63
+ },
64
+ continue: {
65
+ label: 'continue.dev',
66
+ kind: 'rules-file',
67
+ target: '.continue/seo-expert.md',
68
+ source: 'adapters/coding-agent-rules.md',
69
+ note: 'Open-source agent',
70
+ },
71
+ 'claude-code': {
72
+ label: 'Claude Code',
73
+ kind: 'skill-dir',
74
+ target: path.join(os.homedir(), '.claude', 'skills', 'seo-expert'),
75
+ sources: ['SKILL.md', 'core', 'prompts', 'adapters', 'sources'],
76
+ note: 'Anthropic CLI — installs to ~/.claude/skills/seo-expert/',
77
+ },
78
+ 'claude-project': {
79
+ label: 'Claude Project / Desktop',
80
+ kind: 'paste-adapter',
81
+ source: 'adapters/claude-project-instructions.md',
82
+ instructions: [
83
+ '1. Go to claude.ai → New Project',
84
+ '2. Paste the copied text into Custom instructions',
85
+ '3. Upload to Project knowledge: SKILL.md, core/*.md, prompts/*.md, sources/video-index.md',
86
+ ],
87
+ },
88
+ chatgpt: {
89
+ label: 'ChatGPT (Custom GPT or Project)',
90
+ kind: 'paste-adapter',
91
+ source: 'adapters/chatgpt-instructions.md',
92
+ instructions: [
93
+ '1. chatgpt.com → My GPTs → Create (or Projects → New Project)',
94
+ '2. Paste the copied text into Instructions',
95
+ '3. Upload the 9 knowledge files listed in the adapter',
96
+ ],
97
+ },
98
+ gemini: {
99
+ label: 'Gemini Gem',
100
+ kind: 'paste-adapter',
101
+ source: 'adapters/gemini-gem-instructions.md',
102
+ instructions: [
103
+ '1. gemini.google.com → Gems → New Gem',
104
+ '2. Paste the copied text into Gem instructions',
105
+ '3. Embed core/*.md content inline or paste at conversation start',
106
+ ],
107
+ },
108
+ perplexity: {
109
+ label: 'Perplexity Space',
110
+ kind: 'paste-adapter',
111
+ source: 'adapters/perplexity-space-instructions.md',
112
+ instructions: [
113
+ '1. perplexity.ai → Spaces → Create',
114
+ '2. Paste the copied text into Space instructions',
115
+ '3. Add SKILL.md + core/*.md + prompts/*.md to the Space library',
116
+ ],
117
+ },
118
+ };
119
+
120
+ // --- Utilities -----------------------------------------------------------
121
+ function read(rel) {
122
+ return fs.readFileSync(path.join(ROOT, rel), 'utf8');
123
+ }
124
+
125
+ function writeFileSafely(target, content) {
126
+ const abs = path.resolve(target);
127
+ fs.mkdirSync(path.dirname(abs), { recursive: true });
128
+ if (fs.existsSync(abs)) {
129
+ const backup = abs + '.bak.' + Date.now();
130
+ fs.copyFileSync(abs, backup);
131
+ warn(`Existing file backed up → ${c.dim}${path.relative(process.cwd(), backup)}${c.reset}`);
132
+ }
133
+ fs.writeFileSync(abs, content);
134
+ }
135
+
136
+ function copyToClipboard(text) {
137
+ const candidates = process.platform === 'darwin'
138
+ ? [['pbcopy', []]]
139
+ : process.platform === 'win32'
140
+ ? [['clip', []]]
141
+ : [['wl-copy', []], ['xclip', ['-selection', 'clipboard']], ['xsel', ['--clipboard', '--input']]];
142
+ for (const [cmd, args] of candidates) {
143
+ const r = spawnSync(cmd, args, { input: text });
144
+ if (r.status === 0) return true;
145
+ }
146
+ return false;
147
+ }
148
+
149
+ // --- Commands ------------------------------------------------------------
150
+ function help() {
151
+ log(`${c.bold}SEO Expert${c.reset} ${c.dim}v${PKG.version}${c.reset}`);
152
+ log(`${c.dim}Portable SEO + AI-SEO skill — installs into any AI tool.${c.reset}\n`);
153
+ log(`${c.bold}Usage${c.reset}`);
154
+ log(` npx ${PKG.name} install <tool> Install skill files for a coding agent`);
155
+ log(` npx ${PKG.name} copy <tool> Copy adapter content for a web AI tool`);
156
+ log(` npx ${PKG.name} list List all supported tools`);
157
+ log(` npx ${PKG.name} info Show version + repo info`);
158
+ log(` npx ${PKG.name} Interactive menu\n`);
159
+ log(`${c.bold}Tools${c.reset}`);
160
+ for (const [id, t] of Object.entries(TOOLS)) {
161
+ const verb = t.kind === 'paste-adapter' ? `${c.blue}copy ${c.reset}` : `${c.green}install${c.reset}`;
162
+ log(` ${verb} ${c.bold}${id.padEnd(16)}${c.reset} ${c.dim}${t.label} — ${t.note || ''}${c.reset}`);
163
+ }
164
+ log(`\n${c.dim}Docs: ${PKG.homepage}${c.reset}`);
165
+ }
166
+
167
+ async function installTool(id) {
168
+ const t = TOOLS[id];
169
+ if (!t) {
170
+ errf(`unknown tool: ${id}. Run 'npx ${PKG.name} list' to see options.`);
171
+ process.exit(1);
172
+ }
173
+ if (t.kind === 'rules-file') {
174
+ const content = read(t.source);
175
+ const target = path.resolve(process.cwd(), t.target);
176
+ writeFileSafely(target, content);
177
+ ok(`Installed ${t.label} rules → ${c.bold}${path.relative(process.cwd(), target) || t.target}${c.reset}`);
178
+ log(`${c.dim}Next: commit the file. Your agent now applies SEO defaults when editing marketing pages, schema, sitemaps, or meta tags.${c.reset}`);
179
+ return;
180
+ }
181
+ if (t.kind === 'skill-dir') {
182
+ fs.mkdirSync(t.target, { recursive: true });
183
+ for (const s of t.sources) {
184
+ const src = path.join(ROOT, s);
185
+ const dest = path.join(t.target, s);
186
+ const stat = fs.statSync(src);
187
+ if (stat.isDirectory()) fs.cpSync(src, dest, { recursive: true });
188
+ else fs.copyFileSync(src, dest);
189
+ }
190
+ ok(`Installed ${t.label} skill → ${c.bold}${t.target}${c.reset}`);
191
+ log(`${c.dim}Restart Claude Code (or open a new conversation). The skill auto-routes on SEO questions.${c.reset}`);
192
+ return;
193
+ }
194
+ if (t.kind === 'paste-adapter') {
195
+ return copyTool(id);
196
+ }
197
+ }
198
+
199
+ function copyTool(id) {
200
+ const t = TOOLS[id];
201
+ if (!t) { errf(`unknown tool: ${id}`); process.exit(1); }
202
+ if (t.kind !== 'paste-adapter') {
203
+ errf(`'${id}' is a file-based install. Use: npx ${PKG.name} install ${id}`);
204
+ process.exit(1);
205
+ }
206
+ const content = read(t.source);
207
+ const copied = copyToClipboard(content);
208
+ head(`${t.label} adapter`);
209
+ if (copied) {
210
+ ok('Copied adapter to clipboard.');
211
+ } else {
212
+ const fallback = 'seo-expert-adapter.md';
213
+ fs.writeFileSync(fallback, content);
214
+ warn(`Clipboard not available. Adapter written to ${c.bold}${fallback}${c.reset} — open and copy manually.`);
215
+ }
216
+ log('');
217
+ log(`${c.bold}Next steps:${c.reset}`);
218
+ t.instructions.forEach((line) => log(' ' + line));
219
+ log(`\n${c.dim}Full setup walkthrough: ${PKG.homepage}/blob/main/INSTALL.md${c.reset}`);
220
+ }
221
+
222
+ function list() {
223
+ head('Supported tools');
224
+ const file = Object.entries(TOOLS).filter(([, t]) => t.kind !== 'paste-adapter');
225
+ const web = Object.entries(TOOLS).filter(([, t]) => t.kind === 'paste-adapter');
226
+ log(`\n${c.dim}File-based install (drops files into your project / home):${c.reset}`);
227
+ for (const [id, t] of file) {
228
+ log(` ${c.green}install${c.reset} ${c.bold}${id.padEnd(16)}${c.reset} ${c.dim}${t.label}${c.reset}`);
229
+ }
230
+ log(`\n${c.dim}Web-based (copies adapter to clipboard):${c.reset}`);
231
+ for (const [id, t] of web) {
232
+ log(` ${c.blue}copy ${c.reset} ${c.bold}${id.padEnd(16)}${c.reset} ${c.dim}${t.label}${c.reset}`);
233
+ }
234
+ log(`\n${c.dim}Run 'npx ${PKG.name}' with no args for the interactive menu.${c.reset}`);
235
+ }
236
+
237
+ function info() {
238
+ log(`${c.bold}${PKG.name}${c.reset} ${c.dim}v${PKG.version}${c.reset}`);
239
+ log(`${PKG.description}`);
240
+ log(`License: ${PKG.license}`);
241
+ log(`Repo: ${PKG.homepage}`);
242
+ log(`Node: ${process.version}`);
243
+ }
244
+
245
+ async function interactive() {
246
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
247
+ try {
248
+ head('SEO Expert installer');
249
+ log(`${c.dim}Pick the AI tool you want to install the skill into.${c.reset}\n`);
250
+ const entries = Object.entries(TOOLS);
251
+ entries.forEach(([id, t], i) => {
252
+ const verb = t.kind === 'paste-adapter' ? `${c.blue}copy ${c.reset}` : `${c.green}install${c.reset}`;
253
+ log(` ${(i + 1).toString().padStart(2)}. ${verb} ${c.bold}${id.padEnd(16)}${c.reset} ${c.dim}${t.label}${c.reset}`);
254
+ });
255
+ const answer = (await rl.question(`\nNumber or tool id (q to quit): `)).trim().toLowerCase();
256
+ rl.close();
257
+ if (answer === 'q' || answer === '') process.exit(0);
258
+ const byNum = entries[parseInt(answer, 10) - 1];
259
+ const id = byNum ? byNum[0] : answer;
260
+ if (!TOOLS[id]) {
261
+ errf(`unknown tool: ${answer}. Run 'npx ${PKG.name} list' to see options.`);
262
+ process.exit(1);
263
+ }
264
+ await installTool(id);
265
+ } catch (e) {
266
+ errf(e.message);
267
+ process.exit(1);
268
+ }
269
+ }
270
+
271
+ // --- Dispatch ------------------------------------------------------------
272
+ async function main() {
273
+ const [cmd, arg] = process.argv.slice(2);
274
+ switch (cmd) {
275
+ case undefined:
276
+ return interactive();
277
+ case 'help':
278
+ case '-h':
279
+ case '--help':
280
+ return help();
281
+ case 'list':
282
+ return list();
283
+ case 'info':
284
+ case '-v':
285
+ case '--version':
286
+ return info();
287
+ case 'install':
288
+ if (!arg) { errf('usage: install <tool>'); process.exit(1); }
289
+ return installTool(arg);
290
+ case 'copy':
291
+ if (!arg) { errf('usage: copy <tool>'); process.exit(1); }
292
+ return copyTool(arg);
293
+ default:
294
+ errf(`unknown command: ${cmd}`);
295
+ help();
296
+ process.exit(1);
297
+ }
298
+ }
299
+
300
+ main().catch((e) => { errf(e.message); process.exit(1); });
@@ -0,0 +1,60 @@
1
+ # Universal AI SEO Operating System
2
+
3
+ > **When to use this playbook:** SEO audit, page rewrite, AI-visibility / GEO / AEO plan, measurement plan. Also the default starting point when the task type is ambiguous.
4
+
5
+ Use this playbook to improve how a brand, page, or content library appears in traditional search and AI-generated answers. The goal is not only ranking; it is becoming a source that AI systems can extract, trust, and cite.
6
+
7
+ ## Core Workflow
8
+
9
+ 1. Diagnose the current search surface: target queries, existing pages, competitors, SERP features, AI answers, citations, and crawl/index status.
10
+ 2. Map intent and entities: define the audience problem, primary entity, related entities, decision criteria, and proof needed for trust.
11
+ 3. Make content extractable: lead with direct answers, use clear H2/H3 questions, concise paragraphs, tables, lists, FAQ blocks, and source-backed claims.
12
+ 4. Build authority signals: cite original sources, add statistics, show first-hand experience, name authors or experts, collect reviews, and earn relevant mentions.
13
+ 5. Fix technical blockers: crawlability, canonical URLs, schema, sitemap coverage, internal links, page speed, mobile usability, and indexability.
14
+ 6. Validate and monitor: check Google/Bing indexing, AI answer citations, schema validity, rankings, impressions, clicks, leads, and content freshness.
15
+
16
+ ## AI SEO / GEO Principles
17
+
18
+ - Write answer-first sections that can stand alone outside the page.
19
+ - Use named entities consistently: brand, product, location, category, audience, competitors, and use cases.
20
+ - Prefer comparison tables and decision frameworks for commercial queries.
21
+ - Add explicit sources for claims, statistics, definitions, and recommendations.
22
+ - Refresh pages when facts, prices, tools, policies, or market conditions change.
23
+ - Keep boilerplate low; unique, useful information is easier for AI systems to cite.
24
+
25
+ ## Traditional SEO Principles
26
+
27
+ - One clear primary keyword intent per page.
28
+ - Unique title tag, meta description, H1, canonical URL, and structured heading hierarchy.
29
+ - Internal links should point from authority pages to pages that need ranking support.
30
+ - Image filenames and alt text should describe what is visible and relevant.
31
+ - Schema should match the visible page content.
32
+ - Avoid indexable thin pages, duplicate content, and orphan pages.
33
+
34
+ ## Output Standard
35
+
36
+ Every AI tool using this repo should produce:
37
+
38
+ - Prioritized actions, not generic advice.
39
+ - Specific page or content examples.
40
+ - Verification steps.
41
+ - Risks, assumptions, and dependencies.
42
+ - Source references when drawing from the video-derived corpus.
43
+
44
+ ## Measuring AI Search Surface
45
+
46
+ - In GA4 → **Reports → Acquisition → Traffic Acquisition**, add a filter where **Session source** contains `chatgpt`, `perplexity`, `gemini`, or `copilot`. The traffic is small today but trending up; tracking it now establishes a baseline.
47
+ - Look at landing pages receiving LLM referrals. Those are the pages currently being cited — study what makes them extractable (clear answers, schema, entity definitions) and apply the pattern elsewhere.
48
+ - Manually prompt ChatGPT, Perplexity, and Google's AI Overview with the target queries. Record which sources they cite and how the brand is described. Citation gaps and incorrect descriptions are your top-priority content work.
49
+
50
+ ## Earning LLM Citations
51
+
52
+ - LLMs are trained heavily on Reddit, Wikipedia, Stack Exchange, and a small set of high-authority editorial sites. A presence on those platforms — with the brand or product named — increases citation odds independent of traditional ranking.
53
+ - Create a Reddit account using the brand or founder name. Answer questions in subreddits where the audience already asks. Helpful, named, factual answers age into the training data; promotional answers get removed and damage the account.
54
+ - Ensure the brand has a clear entity profile across the open web: a "what is X" definition somewhere indexable, consistent descriptions on directories, and a Wikipedia or Wikidata entry if the business meets notability bars.
55
+
56
+ ## Paid Surface Inside AI Tools
57
+
58
+ - ChatGPT is rolling out sponsored placements. Inventory is new, so CPCs are low and competition is thin relative to mature platforms.
59
+ - Intent inside ChatGPT is unusually explicit — users describe their problem in full sentences rather than two-word queries. Bid on long-tail intent that converts elsewhere; the targeting matches better than search ads at the same stage.
60
+ - Treat this as a 6–18 month arbitrage window. Once enterprise advertisers move in, CPCs normalize. The same playbook applied to Google Ads in 2003 and Facebook Ads in 2013.
@@ -0,0 +1,38 @@
1
+ # SEO Content Strategy
2
+
3
+ > **When to use this playbook:** Content brief, topic cluster plan, editorial calendar, content refresh, internal-link planning, visual / repurposing strategy.
4
+
5
+ ## Topic Planning
6
+
7
+ - Start with audience jobs, pain points, and buying stages.
8
+ - Build topical clusters around entities, not isolated keywords.
9
+ - Cover definitions, comparisons, alternatives, pricing, implementation, mistakes, examples, and templates.
10
+ - Use internal links to make the cluster obvious to users and crawlers.
11
+
12
+ ## Page Patterns
13
+
14
+ - Definition page: answer what it is, who it is for, how it works, examples, risks, and next steps.
15
+ - Comparison page: show decision criteria, table, best-fit recommendations, tradeoffs, and proof.
16
+ - Local/service page: prove location relevance, service specificity, reviews, process, and conversion path.
17
+ - Programmatic page: combine a repeatable template with unique data, examples, and entity-specific answers.
18
+
19
+ ## Content Refresh
20
+
21
+ - Update dates only when content materially changes.
22
+ - Replace stale statistics and screenshots.
23
+ - Add new FAQs based on sales calls, support tickets, Search Console queries, and AI answer gaps.
24
+ - Merge or prune pages that compete for the same intent.
25
+
26
+ ## Visual Asset Pipeline
27
+
28
+ - Convert long-form posts into embeddable infographics: paste the article into ChatGPT (or any image-capable model) and ask for a downloadable infographic, then embed it back into the article. Visual blocks improve dwell time, shareability, and pickup by image SERPs.
29
+ - For video sources, use Google Gemini Canvas — it can read a YouTube URL directly and generate an editable visual asset, which ChatGPT currently cannot do.
30
+ - Use Google NotebookLM to turn a stack of source files (PDFs, blogs, transcripts) into slide decks, infographics, and summaries that you can fact-check and reuse in articles.
31
+ - Always fact-check AI-generated visuals before publishing — hallucinated statistics in an infographic are worse than no infographic.
32
+
33
+ ## AI-Assisted Internal Linking
34
+
35
+ - Identify a page-2 keyword from Search Console.
36
+ - Open ChatGPT with your sitemap XML (or a list of URLs + titles) and prompt: "I'm ranking on page 2 for [keyword]. From this sitemap, suggest three internal links into the ranking page with natural anchor text and the surrounding sentence context."
37
+ - Implement the suggestions, then reinspect the ranking page in Search Console; movement is usually visible within 2–4 weeks.
38
+ - Anchor text should describe the destination intent, not just contain the keyword.
@@ -0,0 +1,24 @@
1
+ # Local SEO Playbook
2
+
3
+ > **When to use this playbook:** Local SEO plan, Google Business Profile work, map-pack visibility, multi-location / service-area pages, review strategy, local citation building.
4
+
5
+ ## Local Trust Signals
6
+
7
+ - Keep name, address, phone, hours, services, and service areas consistent.
8
+ - Optimize Google Business Profile categories, services, photos, products, posts, and Q&A.
9
+ - Ask for specific reviews that mention service, location, outcome, and customer type.
10
+ - Add location proof: neighborhoods, landmarks, staff, projects, photos, and testimonials.
11
+
12
+ ## Local Pages
13
+
14
+ - Avoid thin city-name swaps.
15
+ - Include unique service details, local FAQs, project examples, reviews, and clear calls to action.
16
+ - Link between service pages, location pages, and relevant blog/support content.
17
+ - Use `LocalBusiness` schema only when it matches the business model and visible page content.
18
+
19
+ ## Behavior Signals For Maps Pack
20
+
21
+ - Encourage real local actions: searches for the brand + service, **Directions** taps from the listing, phone calls, and website clicks from the Maps Pack. Google uses these behavior signals to validate that the business actually serves the area for that query.
22
+ - When staff or owners travel to the business location, having them search the target keyword and tap **Directions** from the listing is a low-friction signal worth doing as a habit — it is behavior the listing should already be earning from customers.
23
+ - Do not fake these signals at scale or from unrelated IPs; Google's spam systems flag obvious manipulation and the penalty is loss of Maps Pack visibility, which is far more damaging than the boost.
24
+ - The durable form of this advice: make it easy for real customers to take real actions — directions, calls, photos, review prompts after service — and the behavior signal builds itself.
@@ -0,0 +1,47 @@
1
+ # Programmatic SEO Guardrails
2
+
3
+ > **When to use this playbook:** Programmatic SEO plan, large-scale templated pages (locations, integrations, comparisons, datasets), directory or catalog builds, index-bloat triage.
4
+
5
+ Programmatic SEO works when each generated page satisfies a real search intent with useful unique data. It fails when pages are template duplicates with swapped keywords. Treat the template as a delivery vehicle, not the value — the data and the intent are the value.
6
+
7
+ ## Requirements before generating any pages
8
+
9
+ - **A repeatable search pattern with real demand.** Validate with Search Console queries, third-party keyword tools, or autocomplete + "people also ask" coverage across the pattern. If only a handful of variants have demand, write them by hand instead.
10
+ - **Unique data or examples for every page.** Each URL must answer something a generic article cannot. Common viable inputs: first-party data, structured public datasets, customer reviews, pricing/availability, location-specific facts.
11
+ - **Strong template sections that answer intent directly.** The template's first screen must contain the direct answer. Boilerplate intros pushed above the answer kill extractability.
12
+ - **Internal links between related variants.** Comparison pages link to category and to the items being compared; location pages link to the parent service and to nearby locations.
13
+ - **Quality controls.** Duplication thresholds, thin-content gates, crawl-budget rules (`noindex` filters/sorts/empties), and a kill-switch for variants that produce no value.
14
+
15
+ ## Page-pattern recipes
16
+
17
+ Use these as starting templates. Each row is a viable programmatic pattern, the minimum unique data per page, and the failure mode to watch for.
18
+
19
+ | Pattern | Minimum unique data per page | Failure mode |
20
+ | --- | --- | --- |
21
+ | `[service] in [city]` | Local proof: clients, projects, reviews, neighborhoods served | Thin city swaps with identical body copy → Helpful Content demotion |
22
+ | `[product] alternatives` / `vs [competitor]` | Real comparison table, decision criteria, when-to-pick-each | Aggregator-style listings without an opinion → no citation, no ranking |
23
+ | `[tool] integrations / [tool] + [tool]` | Setup steps, supported triggers/actions, screenshots | Generic "you can connect X and Y" filler → indistinguishable from competitors |
24
+ | `[dataset] for [slice]` (e.g., salaries, prices, stats) | Actual numbers, methodology, last-updated date | Stale or fabricated numbers → trust damage that compounds |
25
+ | `[problem] in [industry/role]` | Industry-specific examples, named tools, named workflows | One generic article cloned across industries → cannibalization |
26
+ | Directory `[category] in [city]` | Real listings with structured fields, owner-verified data | Auto-scraped listings → spam classification + legal risk |
27
+
28
+ ## Validation
29
+
30
+ - **Sample manually before indexing.** Generate 5–10 variants across the value distribution (head, mid, tail). Read them as a user. If two adjacent variants feel interchangeable, the data layer is too thin.
31
+ - **Schema parity.** Schema fields must match visible content. Do not emit `Product`/`Offer`/`LocalBusiness`/`FAQPage` schema with data the page does not display.
32
+ - **Conversion path.** Each variant must have a non-generic call to action tied to its intent (book in this city, compare these specific tools, download the dataset).
33
+ - **Index hygiene.** Canonical/`noindex` rules for filter variants, sort variants, empty results, and duplicate "near-miss" pairs. Watch Search Console **Pages** for "Duplicate, Google chose different canonical" and "Crawled — currently not indexed."
34
+
35
+ ## Monitoring after launch
36
+
37
+ - Indexed-page count vs. submitted-sitemap URL count. Large gaps signal quality or duplication problems, not crawl problems.
38
+ - Impressions and clicks **per variant**, not just overall. The fat middle is where programmatic wins or dies.
39
+ - Crawl stats (Search Console → Settings → Crawl stats). A pattern that spikes crawl with low new-content yield will lose priority over time.
40
+ - Conversion quality per variant: if traffic grows but conversions don't, the page set is bringing the wrong intent.
41
+
42
+ ## When NOT to go programmatic
43
+
44
+ - The user has fewer than ~30 viable variants. Hand-write them.
45
+ - The unique data layer is just paraphrased AI output. The variants will collapse into each other and look like spam.
46
+ - There is no clear conversion path per variant. Programmatic pages without a per-variant call to action become a traffic mirage.
47
+ - The category is already saturated by an authority directory (Yelp, G2, Glassdoor). Compete on a sub-slice with proprietary data, not the same slice with weaker data.
@@ -0,0 +1,51 @@
1
+ # Technical SEO Checklist
2
+
3
+ > **When to use this playbook:** Technical-SEO fix, schema markup plan, Search Console / GA4 measurement, citation and backlink targeting, crawl or index diagnostics.
4
+
5
+ ## Crawl And Index
6
+
7
+ - Verify `robots.txt` allows important pages and required bots.
8
+ - Confirm XML sitemaps include only canonical, indexable URLs.
9
+ - Check pages return the correct HTTP status and do not rely on blocked resources.
10
+ - Ensure canonical tags are self-referencing unless consolidation is intentional.
11
+ - Remove noindex tags from pages that should rank.
12
+ - Submit the sitemap in Google Search Console under **Sitemaps**. Without an explicit submission, Google may delay or skip discovery of new pages — especially on new domains.
13
+ - For brand-new domains, verify ownership in Search Console first; if a site:yourdomain.com search returns "no results," that is the signal Google has not crawled at all yet.
14
+ - After adding any new section or content cluster, resubmit or "Inspect URL" the hub page to nudge recrawl.
15
+
16
+ ## Site Structure
17
+
18
+ - Keep important pages within a few internal clicks from the homepage or hub pages.
19
+ - Use descriptive anchor text that matches the destination page intent.
20
+ - Create hub pages for major topic clusters and link to supporting content.
21
+ - Fix broken links, redirect chains, and orphan URLs.
22
+
23
+ ## Structured Data
24
+
25
+ - Use `Organization`, `WebSite`, `BreadcrumbList`, `Article`, `FAQPage`, `Product`, `LocalBusiness`, or `SoftwareApplication` only when the visible content supports it.
26
+ - Keep schema fields accurate and current.
27
+ - Validate JSON-LD before shipping.
28
+
29
+ ## Performance And Rendering
30
+
31
+ - Optimize Core Web Vitals, especially LCP, INP, and CLS.
32
+ - Render critical content in HTML whenever possible.
33
+ - Compress images and define image dimensions.
34
+ - Avoid layout shifts from late-loading ads, embeds, or fonts.
35
+
36
+ ## Working With Search Console
37
+
38
+ - Open **Search Results**, sort by **Position**, and surface keywords ranking 11–20 (page 2). These are the cheapest wins — small content or internal-link improvements often move them onto page 1.
39
+ - Prioritize page-2 keywords with high **Impressions** but low **Clicks**: existing demand, weak conversion of that demand.
40
+ - For each promising query, click into it, see which page is ranking, and ask: does that page actually answer this intent, or is it ranking by accident? If accidental, build a dedicated page for the intent and link to it from the current ranking page.
41
+ - Use Search Console queries as a backlog source: stale FAQs, missing comparison angles, and gaps in topic coverage all surface here.
42
+
43
+ ## Finding Citation And Backlink Opportunities
44
+
45
+ - Use search operators to surface directories and citation targets that already accept the niche:
46
+ - `[industry] [city] inurl:directory`
47
+ - `[industry] "submit your business"`
48
+ - `[industry] "add your listing"`
49
+ - For competitor reconnaissance, run `"[competitor brand name]" -site:competitor.com` — this exposes every external page mentioning them, which usually includes the directories, podcasts, guest posts, and "best of" lists they have appeared on. Most are open to you too.
50
+ - Prioritize directories with a real audience over high-volume spam lists. Ten relevant placements outperform a hundred low-quality ones, especially after recent algorithm updates that demote sites with thin link profiles.
51
+ - Maintain NAP (Name / Address / Phone) consistency across every listing. Inconsistency dilutes the entity signal.
@@ -0,0 +1,96 @@
1
+ # Video-Derived AI SEO Lessons
2
+
3
+ Generated: 2026-05-13T17:10:37+00:00
4
+
5
+ Use these as source-linked operating principles. They are derived notes, not transcript republication.
6
+
7
+ ## Topic Coverage
8
+
9
+ - `general_seo`: 825 source video(s)
10
+ - `content_strategy`: 185 source video(s)
11
+ - `authority_signals`: 100 source video(s)
12
+ - `conversion_seo`: 76 source video(s)
13
+ - `ai_seo_geo`: 60 source video(s)
14
+ - `technical_seo`: 48 source video(s)
15
+ - `local_seo`: 43 source video(s)
16
+ - `programmatic_seo`: 8 source video(s)
17
+
18
+ ## Operating Principles
19
+
20
+ ### AI SEO / GEO
21
+ - Make claims easy for AI systems to extract, cite, and verify with clear entities, direct answers, and source-backed proof.
22
+ - Recurring terms to inspect in related work: chatgpt, google, seo, https, heytony, audit, com, rank.
23
+ - Source videos: [CduVCb9By1k](https://www.youtube.com/watch?v=CduVCb9By1k), [OH7UJFaTfko](https://www.youtube.com/watch?v=OH7UJFaTfko), [2JrcV2E7L1Y](https://www.youtube.com/watch?v=2JrcV2E7L1Y), [cNTl_x_cnS8](https://www.youtube.com/watch?v=cNTl_x_cnS8), [15CCl7Osv8Y](https://www.youtube.com/watch?v=15CCl7Osv8Y), [5nWP89AlcAc](https://www.youtube.com/watch?v=5nWP89AlcAc), [_UQeZKr136k](https://www.youtube.com/watch?v=_UQeZKr136k), [TzjELQQVIPQ](https://www.youtube.com/watch?v=TzjELQQVIPQ)
24
+
25
+ ### Authority Signals
26
+ - Build visible trust through reviews, citations, backlinks, expertise, and consistent brand signals.
27
+ - Recurring terms to inspect in related work: backlinks, https, seo, google, heytony, audit, com, free.
28
+ - Source videos: [ukHPtXOS6rA](https://www.youtube.com/watch?v=ukHPtXOS6rA), [OH7UJFaTfko](https://www.youtube.com/watch?v=OH7UJFaTfko), [JtmoqvUmzq0](https://www.youtube.com/watch?v=JtmoqvUmzq0), [ez6ZCM5kMgY](https://www.youtube.com/watch?v=ez6ZCM5kMgY), [Sd27zXjfqTo](https://www.youtube.com/watch?v=Sd27zXjfqTo), [3rBfJagQT24](https://www.youtube.com/watch?v=3rBfJagQT24), [cNTl_x_cnS8](https://www.youtube.com/watch?v=cNTl_x_cnS8), [Zfefiqwn8Cw](https://www.youtube.com/watch?v=Zfefiqwn8Cw)
29
+
30
+ ### Content Strategy
31
+ - Map content to search intent and topical authority instead of publishing isolated keyword posts.
32
+ - Recurring terms to inspect in related work: seo, https, heytony, google, audit, content, com, contentmarketing.
33
+ - Source videos: [CduVCb9By1k](https://www.youtube.com/watch?v=CduVCb9By1k), [OH7UJFaTfko](https://www.youtube.com/watch?v=OH7UJFaTfko), [JtmoqvUmzq0](https://www.youtube.com/watch?v=JtmoqvUmzq0), [2JrcV2E7L1Y](https://www.youtube.com/watch?v=2JrcV2E7L1Y), [ez6ZCM5kMgY](https://www.youtube.com/watch?v=ez6ZCM5kMgY), [1sJ3pgnTdso](https://www.youtube.com/watch?v=1sJ3pgnTdso), [cNTl_x_cnS8](https://www.youtube.com/watch?v=cNTl_x_cnS8), [15CCl7Osv8Y](https://www.youtube.com/watch?v=15CCl7Osv8Y)
34
+
35
+ ### Conversion SEO
36
+ - Measure SEO by qualified leads and revenue outcomes, not only rankings or traffic.
37
+ - Recurring terms to inspect in related work: seo, google, https, heytony, audit, com, business, customers.
38
+ - Source videos: [CduVCb9By1k](https://www.youtube.com/watch?v=CduVCb9By1k), [Jj_S37QBYtU](https://www.youtube.com/watch?v=Jj_S37QBYtU), [OH7UJFaTfko](https://www.youtube.com/watch?v=OH7UJFaTfko), [ez6ZCM5kMgY](https://www.youtube.com/watch?v=ez6ZCM5kMgY), [Sd27zXjfqTo](https://www.youtube.com/watch?v=Sd27zXjfqTo), [1sJ3pgnTdso](https://www.youtube.com/watch?v=1sJ3pgnTdso), [3rBfJagQT24](https://www.youtube.com/watch?v=3rBfJagQT24), [cNTl_x_cnS8](https://www.youtube.com/watch?v=cNTl_x_cnS8)
39
+
40
+ ### General SEO
41
+ - Turn each SEO recommendation into a concrete page, content, or technical change that can be verified.
42
+ - Recurring terms to inspect in related work: seo, google, rank, website, don, free, business, doing.
43
+ - Source videos: [LcusOQdYsk4](https://www.youtube.com/watch?v=LcusOQdYsk4), [Z2M2wTvSACc](https://www.youtube.com/watch?v=Z2M2wTvSACc), [GQjfS6m1noc](https://www.youtube.com/watch?v=GQjfS6m1noc), [4PhZ0j9XyZU](https://www.youtube.com/watch?v=4PhZ0j9XyZU), [XSxU3U9TfPg](https://www.youtube.com/watch?v=XSxU3U9TfPg), [stQP8dIzf50](https://www.youtube.com/watch?v=stQP8dIzf50), [vmFRkaIn3n4](https://www.youtube.com/watch?v=vmFRkaIn3n4), [yr8VokbcCJE](https://www.youtube.com/watch?v=yr8VokbcCJE)
44
+
45
+ ### Local SEO
46
+ - Tie local SEO work to calls, reviews, service-area relevance, and Google Business Profile trust signals.
47
+ - Recurring terms to inspect in related work: seo, heytony, google, https, audit, business, com, local.
48
+ - Source videos: [Jj_S37QBYtU](https://www.youtube.com/watch?v=Jj_S37QBYtU), [ez6ZCM5kMgY](https://www.youtube.com/watch?v=ez6ZCM5kMgY), [Sd27zXjfqTo](https://www.youtube.com/watch?v=Sd27zXjfqTo), [3rBfJagQT24](https://www.youtube.com/watch?v=3rBfJagQT24), [15CCl7Osv8Y](https://www.youtube.com/watch?v=15CCl7Osv8Y), [GG-uUzzkf-s](https://www.youtube.com/watch?v=GG-uUzzkf-s), [1dzTGLd5o9s](https://www.youtube.com/watch?v=1dzTGLd5o9s), [vr_LgnOq4tw](https://www.youtube.com/watch?v=vr_LgnOq4tw)
49
+
50
+ ### Programmatic SEO
51
+ - Use repeatable templates only when each page has unique, useful data and a real search intent.
52
+ - Recurring terms to inspect in related work: seo, https, business, heytony, audit, com, here, local.
53
+ - Source videos: [RXxEWOVxmaM](https://www.youtube.com/watch?v=RXxEWOVxmaM), [Lpp5QdHFk80](https://www.youtube.com/watch?v=Lpp5QdHFk80), [UbCIxwN-nuY](https://www.youtube.com/watch?v=UbCIxwN-nuY), [opq02e3crQs](https://www.youtube.com/watch?v=opq02e3crQs), [MXMkQQp1mwc](https://www.youtube.com/watch?v=MXMkQQp1mwc), [TQy39akurjI](https://www.youtube.com/watch?v=TQy39akurjI), [nKP8gdVxYJk](https://www.youtube.com/watch?v=nKP8gdVxYJk), [7enXdUR3f80](https://www.youtube.com/watch?v=7enXdUR3f80)
54
+
55
+ ### Technical SEO
56
+ - Fix crawlability, indexing, internal links, schema, and site structure before scaling content volume.
57
+ - Recurring terms to inspect in related work: seo, google, com, https, website, heytony, audit, here.
58
+ - Source videos: [OH7UJFaTfko](https://www.youtube.com/watch?v=OH7UJFaTfko), [2JrcV2E7L1Y](https://www.youtube.com/watch?v=2JrcV2E7L1Y), [Zfefiqwn8Cw](https://www.youtube.com/watch?v=Zfefiqwn8Cw), [x1dTCLdWs94](https://www.youtube.com/watch?v=x1dTCLdWs94), [2F-6cf-7HJQ](https://www.youtube.com/watch?v=2F-6cf-7HJQ), [mUNrRcnIn7Q](https://www.youtube.com/watch?v=mUNrRcnIn7Q), [pBAufJMSHtE](https://www.youtube.com/watch?v=pBAufJMSHtE), [vr_LgnOq4tw](https://www.youtube.com/watch?v=vr_LgnOq4tw)
59
+
60
+ ## Prompt Seeds
61
+
62
+ - **It only took 6 months 😲**: Use the SEO lesson from 'It only took 6 months 😲' to audit a page for general seo. Return prioritized fixes, examples, and verification steps.
63
+ - **SEO on easy mode 😲**: Use the SEO lesson from 'SEO on easy mode 😲' to audit a page for ai seo geo, content strategy, conversion seo. Return prioritized fixes, examples, and verification steps.
64
+ - **Google loves these signals**: Use the SEO lesson from 'Google loves these signals' to audit a page for authority signals. Return prioritized fixes, examples, and verification steps.
65
+ - **This will get your phone ringing 😲**: Use the SEO lesson from 'This will get your phone ringing 😲' to audit a page for local seo, conversion seo. Return prioritized fixes, examples, and verification steps.
66
+ - **Their sales grew 500% 😲**: Use the SEO lesson from 'Their sales grew 500% 😲' to audit a page for ai seo geo, technical seo, content strategy, conversion seo, authority signals. Return prioritized fixes, examples, and verification steps.
67
+ - **This is insane 🤯**: Use the SEO lesson from 'This is insane 🤯' to audit a page for content strategy, authority signals. Return prioritized fixes, examples, and verification steps.
68
+ - **And he’s fully booked**: Use the SEO lesson from 'And he’s fully booked' to audit a page for ai seo geo, technical seo, content strategy. Return prioritized fixes, examples, and verification steps.
69
+ - **Why Your Google Reviews Are Disappearing (And How to Stop It)**: Use the SEO lesson from 'Why Your Google Reviews Are Disappearing (And How to Stop It)' to audit a page for local seo, content strategy, conversion seo, authority signals. Return prioritized fixes, examples, and verification steps.
70
+ - **You’re likely doing this right now…**: Use the SEO lesson from 'You’re likely doing this right now…' to audit a page for local seo, conversion seo, authority signals. Return prioritized fixes, examples, and verification steps.
71
+ - **Forget SEO**: Use the SEO lesson from 'Forget SEO' to audit a page for content strategy, conversion seo. Return prioritized fixes, examples, and verification steps.
72
+ - **This is BS**: Use the SEO lesson from 'This is BS' to audit a page for local seo, conversion seo, authority signals. Return prioritized fixes, examples, and verification steps.
73
+ - **He knows NOTHING about SEO 😲**: Use the SEO lesson from 'He knows NOTHING about SEO 😲' to audit a page for ai seo geo, content strategy, conversion seo, authority signals. Return prioritized fixes, examples, and verification steps.
74
+ - **Get More Leads From Google. 1 Hour a Week.**: Use the SEO lesson from 'Get More Leads From Google. 1 Hour a Week.' to audit a page for ai seo geo, local seo, content strategy, conversion seo. Return prioritized fixes, examples, and verification steps.
75
+ - **SEO is a lot faster and easier than you think!**: Use the SEO lesson from 'SEO is a lot faster and easier than you think!' to audit a page for ai seo geo, content strategy. Return prioritized fixes, examples, and verification steps.
76
+ - **Anyone can do this 😲**: Use the SEO lesson from 'Anyone can do this 😲' to audit a page for technical seo, content strategy, conversion seo, authority signals. Return prioritized fixes, examples, and verification steps.
77
+ - **This site just broke Google 😲**: Use the SEO lesson from 'This site just broke Google 😲' to audit a page for ai seo geo, content strategy, conversion seo, authority signals. Return prioritized fixes, examples, and verification steps.
78
+ - **FORCE Google to rank your site**: Use the SEO lesson from 'FORCE Google to rank your site' to audit a page for content strategy. Return prioritized fixes, examples, and verification steps.
79
+ - **He promised not to get mad 🤣**: Use the SEO lesson from 'He promised not to get mad 🤣' to audit a page for content strategy, conversion seo, authority signals. Return prioritized fixes, examples, and verification steps.
80
+ - **He knows NOTHING about SEO 🤯**: Use the SEO lesson from 'He knows NOTHING about SEO 🤯' to audit a page for ai seo geo, content strategy, conversion seo, authority signals. Return prioritized fixes, examples, and verification steps.
81
+ - **I’m ditching ChatGPT omg**: Use the SEO lesson from 'I’m ditching ChatGPT omg' to audit a page for ai seo geo, content strategy. Return prioritized fixes, examples, and verification steps.
82
+ - **Why is no one talking about this?**: Use the SEO lesson from 'Why is no one talking about this?' to audit a page for content strategy, authority signals. Return prioritized fixes, examples, and verification steps.
83
+ - **The best ChatGPT prompt ever?**: Use the SEO lesson from 'The best ChatGPT prompt ever?' to audit a page for ai seo geo. Return prioritized fixes, examples, and verification steps.
84
+ - **Do you remember this ad?**: Use the SEO lesson from 'Do you remember this ad?' to audit a page for general seo. Return prioritized fixes, examples, and verification steps.
85
+ - **Set up ChatGPT tracking in GA4 (google analytics)**: Use the SEO lesson from 'Set up ChatGPT tracking in GA4 (google analytics)' to audit a page for ai seo geo. Return prioritized fixes, examples, and verification steps.
86
+ - **How to submit your sitemap on google search console**: Use the SEO lesson from 'How to submit your sitemap on google search console' to audit a page for technical seo, content strategy. Return prioritized fixes, examples, and verification steps.
87
+ - **10x your website traffic for free**: Use the SEO lesson from '10x your website traffic for free' to audit a page for technical seo, content strategy. Return prioritized fixes, examples, and verification steps.
88
+ - **This isn’t cheating, it’s just smart.**: Use the SEO lesson from 'This isn’t cheating, it’s just smart.' to audit a page for local seo, content strategy. Return prioritized fixes, examples, and verification steps.
89
+ - **You can’t unlearn this**: Use the SEO lesson from 'You can’t unlearn this' to audit a page for authority signals. Return prioritized fixes, examples, and verification steps.
90
+ - **Should we be scared?**: Use the SEO lesson from 'Should we be scared?' to audit a page for conversion seo. Return prioritized fixes, examples, and verification steps.
91
+ - **Google just DESTROYED ChatGPT**: Use the SEO lesson from 'Google just DESTROYED ChatGPT' to audit a page for ai seo geo, content strategy. Return prioritized fixes, examples, and verification steps.
92
+ - **This works too well**: Use the SEO lesson from 'This works too well' to audit a page for general seo. Return prioritized fixes, examples, and verification steps.
93
+ - **ChatGPT is launching ads… here’s what you need to know.**: Use the SEO lesson from 'ChatGPT is launching ads… here’s what you need to know.' to audit a page for ai seo geo. Return prioritized fixes, examples, and verification steps.
94
+ - **Force Google to know about your site**: Use the SEO lesson from 'Force Google to know about your site' to audit a page for technical seo. Return prioritized fixes, examples, and verification steps.
95
+ - **Canva just destroyed Photoshop**: Use the SEO lesson from 'Canva just destroyed Photoshop' to audit a page for ai seo geo, content strategy. Return prioritized fixes, examples, and verification steps.
96
+ - **It’s kind of scary**: Use the SEO lesson from 'It’s kind of scary' to audit a page for content strategy. Return prioritized fixes, examples, and verification steps.