{"slug":"marketing-pages","title":"marketing-pages","summary":"Best-practice rulebook for a marketing site's pages, organized by page class — campaign landers, product pages, programmatic SEO trees, editorial. Use when writing or updating a landing/marketing page, wiring a campaign lander to an attribution identifier, changing site-wide nav/","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-10-14T21:49:25.957538Z","repo":{"url":"https://github.com/dzhng/skills","stars":1333,"forks":81,"license":"MIT","updatedAt":"2026-10-14T20:39:18Z"},"bodyHtml":"<hr>\n<h2>name: marketing-pages\ndescription: Best-practice rulebook for a marketing site's pages, organized by page class — campaign landers, product pages, programmatic SEO trees, editorial. Use when writing or updating a landing/marketing page, wiring a campaign lander to an attribution identifier, changing site-wide nav/footer links, touching sitemap/robots/agent-readable surfaces, or auditing a public site's indexing, reachability, and conversion setup.</h2>\n<h1>Marketing Pages</h1>\n<p>A rulebook, not a workflow: every rule below is simultaneously a constraint to\nbuild against and a check to audit against. Classify the page first — every\npublic page belongs to exactly one <strong>page class</strong>, and the class decides its\nindexing, linking, chrome, and wiring.</p>\n<h2>Page classes</h2>\n<table>\n<thead>\n<tr>\n<th>Class</th>\n<th>Indexing</th>\n<th>Reachability</th>\n<th>Chrome</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Campaign lander</strong></td>\n<td><code>noindex, follow</code>; never in a sitemap</td>\n<td>never linked from nav/footer</td>\n<td>minimal: logo + ONE CTA, legal-only footer, no site nav</td>\n</tr>\n<tr>\n<td><strong>Product page</strong></td>\n<td>indexed</td>\n<td>nav Product section and/or footer</td>\n<td>full chrome</td>\n</tr>\n<tr>\n<td><strong>SEO tree page</strong> (programmatic: per-persona, per-industry, per-competitor)</td>\n<td>indexed</td>\n<td>footer link grid + hub pages</td>\n<td>full chrome</td>\n</tr>\n<tr>\n<td><strong>Editorial</strong> (blog/guides)</td>\n<td>indexed</td>\n<td>header + footer</td>\n<td>full chrome</td>\n</tr>\n<tr>\n<td>Legal/utility</td>\n<td>indexed</td>\n<td>footer</td>\n<td>full chrome</td>\n</tr>\n</tbody>\n</table>\n<ul>\n<li>A page that is noindexed AND unlinked is a <strong>zombie</strong> — promote it to a\nlinked, indexed class or make it a campaign lander. Never leave the halfway\nstate.</li>\n<li>Campaign landers live in a dedicated URL prefix (e.g. <code>/l/&lt;slug&gt;</code>): one\n<code>startsWith</code> covers blanket noindex and \"never nav-linked\" checks, and slug\ncollisions with real pages become impossible.</li>\n</ul>\n<h2>Campaign lander rules</h2>\n<p>Campaign landers are alternate main landers — one audience, one promise, paid\ntraffic. They trade SEO for message-match freedom; indexed near-duplicates\nsplit authority and freeze copy that should be A/B-able daily.</p>\n<ul>\n<li><strong>Message match end-to-end</strong>: ad copy → H1 → post-signup first screen, one\nunbroken promise. Where the product supports it, the campaign identifier\nflows through signup into onboarding and analytics, so the first-run\nexperience continues the promise and conversions attribute per lander.</li>\n<li>One CTA, repeated down the page; social proof beside it; friction-reducing\nmicrocopy (\"no credit card\"); capture only what qualifies later (usually\njust email).</li>\n<li>Static text/image hero — no full-viewport video or heavy JS above the fold.\nLCP is a conversion input on paid traffic.</li>\n<li>A lander you cannot measure cannot be iterated: conversion-per-lander\n(lead → signup → purchase) must be readable somewhere before ads spend.</li>\n<li>Killed campaign pages get no redirects: deleted routes 404, and the 404s in\nSearch Console afterward are the intended signal, not a defect.</li>\n</ul>\n<h2>Indexed page rules</h2>\n<p>Each of these has one owner in the codebase — find the current owner rather\nthan trusting remembered paths:</p>\n<ul>\n<li>The route appears in whatever closed-world route registry the site's gates\ncheck against.</li>\n<li>Indexed ⇔ sitemapped, always both or neither: a noindexed URL in the\nsitemap is a contradictory signal, as is an indexed page missing from it.\n<code>lastmod</code> is honest (content date, not build time).</li>\n<li>Agent-readable surfaces, if the site ships them (llms.txt, markdown twins),\nrender from the same copy source the page renders from — never from built\nHTML, never hand-drifted duplicates.</li>\n<li>Robots allows reviewed indexed trees for AI crawlers; disallows only\ncampaign landers and internal surfaces. robots, meta robots, and the\nsitemap must agree on every URL.</li>\n<li>Every indexed page is reachable from header or footer — the footer link\ngrid is the crawl rail. Pages discoverable only via the sitemap sit in\n\"Discovered — not indexed\" for weeks and receive no internal authority.</li>\n<li>Product facts (pricing, limits, tier names) derive from the single source\nthe product code owns — restated numbers drift silently and nothing turns\nred.</li>\n<li>Internal links name paths, never origins, so a closed-world check can\nverify every authored target resolves.</li>\n<li>Locale-prefixed links to pages that exist in only one locale must resolve\n(redirect to the canonical locale, not 404) — sitewide chrome prefetches\nevery link from every page.</li>\n<li>Deleting or renaming a page deletes every reference in the same pass: route\nregistry, sitemap, agent-readable twin, links from kept pages, visual\nbaselines, and e2e/journey anchors (grep the test suites — a rename that\nkeeps local gates green can break a live journey hours later).</li>\n</ul>\n<h2>SEO rules</h2>\n<ul>\n<li>Contextual in-body links from editorial to money pages move more authority\nthan footer anchors — add them where content genuinely relates.</li>\n<li>Comparison/competitor pages carry an honest visible updated-date and get\nrefreshed on a real cadence — a stale dated page is worse than an undated\none.</li>\n<li>Programmatic tree pages stay substantive (concrete jobs, specific copy) —\nthin templated pages are doorway-page bait.</li>\n<li>Hub pages exist so leaves inherit authority: every tree leaf is linked from\nits hub, and the hub from the site chrome.</li>\n</ul>\n<h2>Visual coverage rules</h2>\n<ul>\n<li>Reusable sections and components have an isolated, deterministic <strong>fixture</strong>\n(playground/storybook entry) that owns their visual coverage; the fixture\nmenu doubles as the component catalog new pages are composed from.</li>\n<li>Representative full-page screenshots stay at ONE key route per template.\nRoutes churn; fixtures are the stable oracle. New template → one new\nrepresentative route; new section → a fixture, not more route shots.</li>\n<li>Visual baselines are accepted only after an unprimed second opinion — eyes\nprimed by the change pass defects fresh eyes catch.</li>\n</ul>\n<h2>Audit sweeps</h2>\n<p>Auditing a site = evaluating every rule above, plus these cross-cutting\nsweeps; each must come back empty or explained:</p>\n<ol>\n<li>Zombie pages (noindexed AND unlinked).</li>\n<li>Sitemap/robots/meta disagreements.</li>\n<li>Campaign lander linked from any indexed page, or present in a sitemap.</li>\n<li>Indexed page unreachable from header/footer.</li>\n<li>Component with no owner in the visual coverage system.</li>\n<li>Marketing copy restating a product fact that has a canonical owner.</li>\n<li>Broken locale-crossed links from sitewide chrome.</li>\n</ol>\n","files":[{"path":"SKILL.md","sizeBytes":6299,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-10-14T21:49:49.512828Z","sha256":"F653E83B4156455A1406F40DEF78160AFBD611E37FF564B5F335A03502C5A7DD","sizeBytes":3053},"review":null,"source":{"repositoryUrl":"https://github.com/dzhng/skills","path":"skills/engineering/marketing-pages","license":"MIT","commit":"f2fbf92f131fb08bbf3e400a1ef99b7be85bb2bc","subtreeSha":"651AB04624F70A925A08D430207BB2DBD65FEC97ABF304F4B9FED86D053BF84B","lastSyncedAt":"2026-10-14T21:49:23.275319Z"},"reviewedAt":"2026-10-14T21:50:41.194095Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/dzhng/skills/tree/main/skills/engineering/marketing-pages"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install dzhng-skills@llmmart"},{"target":"git","command":"git clone https://github.com/dzhng/skills.git"}]}