{"id":"5dbe5239-9790-4021-acb0-0cc8e90c144b","shortId":"9mgPBL","kind":"skill","title":"seo-programmatic","tagline":"Plan and audit programmatic SEO pages generated at scale from structured data. Use when designing templates, URL systems, internal linking, quality gates, and index-bloat safeguards for pages at scale.","description":"# Programmatic SEO Analysis & Planning\n\nBuild and audit SEO pages generated at scale from structured data sources.\nEnforces quality gates to prevent thin content penalties and index bloat.\n\n## When to Use\n- Use when the user wants programmatic SEO planning or review.\n- Use when designing templates, data-driven pages, or scalable URL systems.\n- Use when preventing thin content and index bloat across large page sets.\n\n## Data Source Assessment\n\nEvaluate the data powering programmatic pages:\n- **CSV/JSON files**: Row count, column uniqueness, missing values\n- **API endpoints**: Response structure, data freshness, rate limits\n- **Database queries**: Record count, field completeness, update frequency\n- Data quality checks:\n  - Each record must have enough unique attributes to generate distinct content\n  - Flag duplicate or near-duplicate records (>80% field overlap)\n  - Verify data freshness; stale data produces stale pages\n\n## Template Engine Planning\n\nDesign templates that produce unique, valuable pages:\n- **Variable injection points**: Title, H1, body sections, meta description, schema\n- **Content blocks**: Static (shared across pages) vs dynamic (unique per page)\n- **Conditional logic**: Show/hide sections based on data availability\n- **Supplementary content**: Related items, contextual tips, user-generated content\n- Template review checklist:\n  - Each page must read as a standalone, valuable resource\n  - No \"mad-libs\" patterns (just swapping city/product names in identical text)\n  - Dynamic sections must add genuine information, not just keyword variations\n\n## URL Pattern Strategy\n\n### Common Patterns\n- `/tools/[tool-name]`: Tool/product directory pages\n- `/[city]/[service]`: Location + service pages\n- `/integrations/[platform]`: Integration landing pages\n- `/glossary/[term]`: Definition/reference pages\n- `/templates/[template-name]`: Downloadable template pages\n\n### URL Rules\n- Lowercase, hyphenated slugs derived from data\n- Logical hierarchy reflecting site architecture\n- No duplicate slugs; enforce uniqueness at generation time\n- Keep URLs under 100 characters\n- No query parameters for primary content URLs\n- Consistent trailing slash usage (match existing site pattern)\n\n## Internal Linking Automation\n\n- **Hub/spoke model**: Category hub pages linking to individual programmatic pages\n- **Related items**: Auto-link to 3-5 related pages based on data attributes\n- **Breadcrumbs**: Generate BreadcrumbList schema from URL hierarchy\n- **Cross-linking**: Link between programmatic pages sharing attributes (same category, same city, same feature)\n- **Anchor text**: Use descriptive, varied anchor text. Avoid exact-match keyword repetition\n- Link density: 3-5 internal links per 1000 words (match seo-content guidelines)\n\n## Thin Content Safeguards\n\n### Quality Gates\n\n| Metric | Threshold | Action |\n|--------|-----------|--------|\n| Pages without content review | 100+ | ⚠️ WARNING: require content audit before publishing |\n| Pages without justification | 500+ | 🛑 HARD STOP: require explicit user approval and thin content audit |\n| Unique content per page | <40% | ❌ Flag as thin content (likely penalty risk) |\n| Word count per page | <300 | ⚠️ Flag for review (may lack sufficient value) |\n\n### Scaled Content Abuse: Enforcement Context (2025-2026)\n\nGoogle's Scaled Content Abuse policy (introduced March 2024) saw major enforcement escalation in 2025:\n\n- **June 2025:** Wave of manual actions targeting websites with AI-generated content at scale\n- **August 2025:** SpamBrain spam update enhanced pattern detection for AI-generated link schemes and content farms\n- **Result:** Google reported 45% reduction in low-quality, unoriginal content in search results post-March 2024 enforcement\n\n**Enhanced quality gates for programmatic pages:**\n- **Content differentiation:** ≥30-40% of content must be genuinely unique between any two programmatic pages (not just city/keyword string replacement)\n- **Human review:** Minimum 5-10% sample review of generated pages before publishing\n- **Progressive rollout:** Publish in batches of 50-100 pages. Monitor indexing and rankings for 2-4 weeks before expanding. Never publish 500+ programmatic pages simultaneously without explicit quality review.\n- **Standalone value test:** Each page should pass: \"Would this page be worth publishing even if no other similar pages existed?\"\n- **Site reputation abuse:** If publishing programmatic content under a high-authority domain (not your own), this may trigger site reputation abuse penalties. Google began enforcing this aggressively in November 2024.\n\n> **Recommendation:** The WARNING gate at `<40% unique content` remains appropriate. Consider a HARD STOP at `<30%` unique content to prevent scaled content abuse risk.\n\n### Safe Programmatic Pages (OK at scale)\n✅ Integration pages (with real setup docs, API details, screenshots)\n✅ Template/tool pages (with downloadable content, usage instructions)\n✅ Glossary pages (200+ word definitions with examples, related terms)\n✅ Product pages (unique specs, reviews, comparison data)\n✅ Data-driven pages (unique statistics, charts, analysis per record)\n\n### Penalty Risk (avoid at scale)\n❌ Location pages with only city name swapped in identical text\n❌ \"Best [tool] for [industry]\" without industry-specific value\n❌ \"[Competitor] alternative\" without real comparison data\n❌ AI-generated pages without human review and unique value-add\n❌ Pages where >60% of content is shared template boilerplate\n\n### Uniqueness Calculation\nUnique content % = (words unique to this page) / (total words on page) × 100\n\nMeasure against all other pages in the programmatic set. Shared headers, footers, and navigation are excluded from the calculation. Template boilerplate text IS included.\n\n## Canonical Strategy\n\n- Every programmatic page must have a self-referencing canonical tag\n- Parameter variations (sort, filter, pagination) canonical to the base URL\n- Paginated series: canonical to page 1 or use rel=next/prev\n- If programmatic pages overlap with manual pages, the manual page is canonical\n- No canonical to a different domain unless intentional cross-domain setup\n\n## Sitemap Integration\n\n- Auto-generate sitemap entries for all programmatic pages\n- Split at 50,000 URLs per sitemap file (protocol limit)\n- Use sitemap index if multiple sitemap files needed\n- `<lastmod>` reflects actual data update timestamp (not generation time)\n- Exclude noindexed programmatic pages from sitemap\n- Register sitemap in robots.txt\n- Update sitemap dynamically as new records are added to data source\n\n## Index Bloat Prevention\n\n- **Noindex low-value pages**: Pages that don't meet quality gates\n- **Pagination**: Noindex paginated results beyond page 1 (or use rel=next/prev)\n- **Faceted navigation**: Noindex filtered views, canonical to base category\n- **Crawl budget**: For sites with >10k programmatic pages, monitor crawl stats in Search Console\n- **Thin page consolidation**: Merge records with insufficient data into aggregated pages\n- **Regular audits**: Monthly review of indexed page count vs intended count\n\n## Output\n\n### Programmatic SEO Score: XX/100\n\n### Assessment Summary\n| Category | Status | Score |\n|----------|--------|-------|\n| Data Quality | ✅/⚠️/❌ | XX/100 |\n| Template Uniqueness | ✅/⚠️/❌ | XX/100 |\n| URL Structure | ✅/⚠️/❌ | XX/100 |\n| Internal Linking | ✅/⚠️/❌ | XX/100 |\n| Thin Content Risk | ✅/⚠️/❌ | XX/100 |\n| Index Management | ✅/⚠️/❌ | XX/100 |\n\n### Critical Issues (fix immediately)\n### High Priority (fix within 1 week)\n### Medium Priority (fix within 1 month)\n### Low Priority (backlog)\n\n### Recommendations\n- Data source improvements\n- Template modifications\n- URL pattern adjustments\n- Quality gate compliance actions\n\n## Error Handling\n\n| Scenario | Action |\n|----------|--------|\n| URL unreachable | Report connection error with status code. Suggest verifying URL accessibility and checking for authentication requirements. |\n| No programmatic pages detected | Inform user that no template-generated or data-driven page patterns were found. Suggest checking if pages use client-side rendering or if the URL points to the correct section. |\n| Thin content threshold exceeded | Trigger quality gate warning. Report the unique content percentage and flag pages below 40% uniqueness. Require user acknowledgment before proceeding. |\n| Quality gate violation | Halt analysis at the HARD STOP threshold (500+ pages without justification or <30% unique content). Present findings and require explicit user approval to continue. |\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["seo","programmatic","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows"],"capabilities":["skill","source-sickn33","skill-seo-programmatic","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/seo-programmatic","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34515 github stars · SKILL.md body (8,844 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T12:51:44.711Z","embedding":null,"createdAt":"2026-04-18T21:44:37.736Z","updatedAt":"2026-04-22T12:51:44.711Z","lastSeenAt":"2026-04-22T12:51:44.711Z","tsv":"'-10':557 '-100':572 '-2026':460 '-4':580 '-40':536 '-5':341,386 '/glossary':269 '/integrations':264 '/templates':273 '/tools':252 '000':877 '1':834,942,1029,1035 '100':304,409,781 '1000':390 '10k':961 '2':579 '200':693 '2024':469,525,644 '2025':459,475,477,492 '3':340,385 '30':535,660,1150 '300':446 '40':434,650,1128 '45':511 '5':556 '50':571,876 '500':419,586,1145 '60':761 '80':153 'abus':456,465,616,635,667 'access':1068 'acknowledg':1132 'across':95,188 'action':404,481,1052,1056 'actual':893 'ad':917 'add':240,758 'adjust':1048 'aggreg':979 'aggress':641 'ai':486,501,748 'ai-gener':485,500,747 'altern':742 'analysi':37,714,1139 'anchor':370,375 'api':116,681 'appropri':654 'approv':425,1159 'architectur':292 'ask':1195 'assess':101,997 'attribut':141,347,363 'audit':6,41,413,429,982 'august':491 'authent':1072 'author':625 'auto':337,866 'auto-gener':865 'auto-link':336 'autom':323 'avail':202 'avoid':377,719 'backlog':1039 'base':199,344,827,954 'batch':569 'began':638 'best':732 'beyond':940 'bloat':29,61,94,922 'block':185 'bodi':179 'boilerpl':767,802 'boundari':1203 'breadcrumb':348 'breadcrumblist':350 'budget':957 'build':39 'calcul':769,800 'canon':806,817,824,831,850,852,952 'categori':326,365,955,999 'charact':305 'chart':713 'check':134,1070,1094 'checklist':215 'citi':259,367,726 'city/keyword':550 'city/product':232 'clarif':1197 'clear':1170 'client':1099 'client-sid':1098 'code':1064 'column':112 'common':250 'comparison':705,745 'competitor':741 'complet':129 'complianc':1051 'condit':195 'connect':1060 'consid':655 'consist':313 'consol':969 'consolid':972 'content':57,91,145,184,204,212,311,395,398,407,412,428,431,438,455,464,488,506,518,533,538,620,652,662,666,688,763,771,1015,1112,1122,1152 'context':458 'contextu':207 'continu':1161 'correct':1109 'count':111,127,443,988,991 'crawl':956,965 'criteria':1206 'critic':1021 'cross':356,860 'cross-domain':859 'cross-link':355 'csv/json':108 'data':15,49,80,99,104,120,132,157,160,201,287,346,706,708,746,894,919,977,1002,1041,1087 'data-driven':79,707,1086 'databas':124 'definit':695 'definition/reference':271 'densiti':384 'deriv':285 'describ':1174 'descript':182,373 'design':18,77,167 'detail':682 'detect':498,1077 'differ':855 'differenti':534 'directori':257 'distinct':144 'doc':680 'domain':626,856,861 'download':277,687 'driven':81,709,1088 'duplic':147,151,294 'dynam':191,237,912 'endpoint':117 'enforc':51,296,457,472,526,639 'engin':165 'enhanc':496,527 'enough':139 'entri':869 'environ':1186 'environment-specif':1185 'error':1053,1061 'escal':473 'evalu':102 'even':607 'everi':808 'exact':379 'exact-match':378 'exampl':697 'exceed':1114 'exclud':797,900 'exist':318,613 'expand':583 'expert':1191 'explicit':423,591,1157 'facet':947 'farm':507 'featur':369 'field':128,154 'file':109,881,890 'filter':822,950 'find':1154 'fix':1023,1027,1033 'flag':146,435,447,1125 'footer':793 'found':1092 'frequenc':131 'fresh':121,158 'gate':25,53,401,529,648,935,1050,1117,1136 'generat':10,44,143,211,299,349,487,502,561,749,867,898,1084 'genuin':241,541 'glossari':691 'googl':461,509,637 'guidelin':396 'h1':178 'halt':1138 'handl':1054 'hard':420,657,1142 'header':792 'hierarchi':289,354 'high':624,1025 'high-author':623 'hub':327 'hub/spoke':324 'human':553,752 'hyphen':283 'ident':235,730 'immedi':1024 'improv':1043 'includ':805 'index':28,60,93,575,886,921,986,1018 'index-bloat':27 'individu':331 'industri':735,738 'industry-specif':737 'inform':242,1078 'inject':175 'input':1200 'instruct':690 'insuffici':976 'integr':266,675,864 'intend':990 'intent':858 'intern':22,321,387,1011 'introduc':467 'issu':1022 'item':206,335 'june':476 'justif':418,1148 'keep':301 'keyword':245,381 'lack':451 'land':267 'larg':96 'lib':228 'like':439 'limit':123,883,1162 'link':23,322,329,338,357,358,383,388,503,1012 'locat':261,722 'logic':196,288 'low':515,926,1037 'low-qual':514 'low-valu':925 'lowercas':282 'mad':227 'mad-lib':226 'major':471 'manag':1019 'manual':480,844,847 'march':468,524 'match':317,380,392,1171 'may':450,631 'measur':782 'medium':1031 'meet':933 'merg':973 'meta':181 'metric':402 'minimum':555 'miss':114,1208 'model':325 'modif':1045 'monitor':574,964 'month':983,1036 'multipl':888 'must':137,218,239,539,811 'name':233,255,276,727 'navig':795,948 'near':150 'near-dupl':149 'need':891 'never':584 'new':914 'next/prev':838,946 'noindex':901,924,937,949 'novemb':643 'ok':672 'output':992,1180 'overlap':155,842 'page':9,32,43,82,97,107,163,173,189,194,217,258,263,268,272,279,328,333,343,361,405,416,433,445,532,547,562,573,588,598,603,612,671,676,685,692,701,710,723,750,759,776,780,786,810,833,841,845,848,873,903,928,929,941,963,971,980,987,1076,1089,1096,1126,1146 'pagin':823,829,936,938 'paramet':308,819 'pass':600 'pattern':229,248,251,320,497,1047,1090 'penalti':58,440,636,717 'per':193,389,432,444,715,879 'percentag':1123 'permiss':1201 'plan':4,38,72,166 'platform':265 'point':176,1106 'polici':466 'post':523 'post-march':522 'power':105 'present':1153 'prevent':55,89,664,923 'primari':310 'prioriti':1026,1032,1038 'proceed':1134 'produc':161,170 'product':700 'programmat':3,7,35,70,106,332,360,531,546,587,619,670,789,809,840,872,902,962,993,1075 'progress':565 'protocol':882 'publish':415,564,567,585,606,618 'qualiti':24,52,133,400,516,528,592,934,1003,1049,1116,1135 'queri':125,307 'rank':577 'rate':122 'read':219 'real':678,744 'recommend':645,1040 'record':126,136,152,716,915,974 'reduct':512 'referenc':816 'reflect':290,892 'regist':906 'regular':981 'rel':837,945 'relat':205,334,342,698 'remain':653 'render':1101 'repetit':382 'replac':552 'report':510,1059,1119 'reput':615,634 'requir':411,422,1073,1130,1156,1199 'resourc':224 'respons':118 'result':508,521,939 'review':74,214,408,449,554,559,593,704,753,984,1192 'risk':441,668,718,1016 'robots.txt':909 'rollout':566 'row':110 'rule':281 'safe':669 'safeguard':30,399 'safeti':1202 'sampl':558 'saw':470 'scalabl':84 'scale':12,34,46,454,463,490,665,674,721 'scenario':1055 'schema':183,351 'scheme':504 'scope':1173 'score':995,1001 'screenshot':683 'search':520,968 'section':180,198,238,1110 'self':815 'self-referenc':814 'seo':2,8,36,42,71,394,994 'seo-cont':393 'seo-programmat':1 'seri':830 'servic':260,262 'set':98,790 'setup':679,862 'share':187,362,765,791 'show/hide':197 'side':1100 'similar':611 'simultan':589 'site':291,319,614,633,959 'sitemap':863,868,880,885,889,905,907,911 'skill':1165 'skill-seo-programmatic' 'slash':315 'slug':284,295 'sort':821 'sourc':50,100,920,1042 'source-sickn33' 'spam':494 'spambrain':493 'spec':703 'specif':739,1187 'split':874 'stale':159,162 'standalon':222,594 'stat':966 'static':186 'statist':712 'status':1000,1063 'stop':421,658,1143,1193 'strategi':249,807 'string':551 'structur':14,48,119,1009 'substitut':1183 'success':1205 'suffici':452 'suggest':1065,1093 'summari':998 'supplementari':203 'swap':231,728 'system':21,86 'tag':818 'target':482 'task':1169 'templat':19,78,164,168,213,275,278,766,801,1005,1044,1083 'template-gener':1082 'template-nam':274 'template/tool':684 'term':270,699 'test':596,1189 'text':236,371,376,731,803 'thin':56,90,397,427,437,970,1014,1111 'threshold':403,1113,1144 'time':300,899 'timestamp':896 'tip':208 'titl':177 'tool':254,733 'tool-nam':253 'tool/product':256 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'total':777 'trail':314 'treat':1178 'trigger':632,1115 'two':545 'uniqu':113,140,171,192,297,430,542,651,661,702,711,755,768,770,773,1006,1121,1129,1151 'unless':857 'unorigin':517 'unreach':1058 'updat':130,495,895,910 'url':20,85,247,280,302,312,353,828,878,1008,1046,1057,1067,1105 'usag':316,689 'use':16,64,65,75,87,372,836,884,944,1097,1163 'user':68,210,424,1079,1131,1158 'user-gener':209 'valid':1188 'valu':115,453,595,740,757,927 'valuabl':172,223 'value-add':756 'vari':374 'variabl':174 'variat':246,820 'verifi':156,1066 'view':951 'violat':1137 'vs':190,989 'want':69 'warn':410,647,1118 'wave':478 'websit':483 'week':581,1030 'within':1028,1034 'without':406,417,590,736,743,751,1147 'word':391,442,694,772,778 'worth':605 'would':601 'xx/100':996,1004,1007,1010,1013,1017,1020","prices":[{"id":"fc7fc41e-c2b4-4fca-a81e-259aff790df3","listingId":"5dbe5239-9790-4021-acb0-0cc8e90c144b","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:44:37.736Z"}],"sources":[{"listingId":"5dbe5239-9790-4021-acb0-0cc8e90c144b","source":"github","sourceId":"sickn33/antigravity-awesome-skills/seo-programmatic","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/seo-programmatic","isPrimary":false,"firstSeenAt":"2026-04-18T21:44:37.736Z","lastSeenAt":"2026-04-22T12:51:44.711Z"}],"details":{"listingId":"5dbe5239-9790-4021-acb0-0cc8e90c144b","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"seo-programmatic","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34515,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-22T06:40:00Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"0c2e280dba8914e0e1dc51dd6412a6feabc72464","skill_md_path":"skills/seo-programmatic/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/seo-programmatic"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"seo-programmatic","description":"Plan and audit programmatic SEO pages generated at scale from structured data. Use when designing templates, URL systems, internal linking, quality gates, and index-bloat safeguards for pages at scale."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/seo-programmatic"},"updatedAt":"2026-04-22T12:51:44.711Z"}}