1# Launch checklist
2
3What has to be true before this site goes public, in the order it has to
4happen. Read this file before any launch, domain or indexing work. The order
5is part of the rule: the domain is public the instant it is attached.
6
7## Phase 1 - before the domain
8The site is readable by a human with the URL and invisible to every crawler.
9
10- [ ] One constant holds the site name and canonical URL. Nothing else in the
11 code hardcodes the domain. Canonicals, sitemap, card images, JSON-LD
12 ids and utm_source all derive from it
13- [ ] A launch flag, off by default. While it is off, middleware puts
14 `X-Robots-Tag: noindex, nofollow` on every response, and robots.txt
15 allows crawling and advertises no sitemap. Do not use Disallow: a
16 crawler that cannot fetch the page never reads the header
17- [ ] Every preview and platform host (`*.vercel.app` or equivalent) is
18 behind the host's authentication. Share previews with a share link or
19 a password, never by opening the production URL
20- [ ] The legal pages carry the registered entity, address and contact, and
21 the analytics the privacy page describes is the analytics that runs.
22 An imprint with placeholder values goes noindex and out of the sitemap
23 until it is real
24
25## Phase 2 - every page earns its place
26Each public route carries this set. A script reads the built HTML and fails
27the build on any of it, and it runs in CI after the build.
28
29- [ ] Title: unique across the site, the subject in the first words
30- [ ] Description: hand-written, 140-160 characters, repeated nowhere, held
31 in its own field. The visible summary is not the description
32- [ ] Canonical: absolute, on the canonical origin
33- [ ] Exactly one H1
34- [ ] `og:image`: absolute, returns 200. A real card, on every route
35- [ ] JSON-LD: one connected graph. Organization and WebSite declared once
36 from the layout; every page below the home has a BreadcrumbList; one
37 node's `@id` is the page's own canonical URL; no id defined twice;
38 never Review or AggregateRating without real, visible ratings
39- [ ] Articles: author is a reference to a Person on an author page, dates
40 in the markup match the dates on the page
41- [ ] At least one internal link in and one out
42- [ ] When a page fails the gate, fix the page. Never widen the rule
43
44## Phase 3 - the site files come from one list
45- [ ] One route registry, derived from the content data. sitemap.xml,
46 robots.txt and llms.txt all read from it, so a new entry cannot be
47 missing from any of them
48- [ ] A check that walks the app directory against the registry, both ways:
49 a route file that is neither published nor excluded fails, and a
50 registry path with no file behind it fails
51- [ ] Routes kept out of the index are listed with the reason, in code
52- [ ] Sitemap dates are the day the content changed, never the build time
53- [ ] Outbound links go through a redirector: 302, `cache-control:
54 no-store`, `x-robots-tag: noindex`, disallowed in robots.txt
55- [ ] AI crawlers are allowed or blocked as a decision, named in robots.txt
56 with the reason in a comment
57
58## Phase 4 - launch day, in this order
591. Content ready, both gates green on main, canonical host decided (www or
60 apex) and set in the constant
612. Flip the launch flag in the production environment and redeploy. This is
62 a deliberate act, not a default
633. Attach the domain
644. Verify the host with plain requests: the canonical URL answers 200; the
65 twin host, both http variants and every preview host answer 301 or 308
66 to it in one hop; no response carries a noindex header; an unknown path
67 is a 404; the sitemap is a 200
685. Search Console: verify by DNS TXT record, not an HTML file, so it
69 survives every redeploy. Submit the sitemap
706. Bing Webmaster Tools: import from Search Console. Its index feeds ChatGPT
71 search. Add the IndexNow key so new pages are submitted on publish
727. Rich Results Test and the Schema.org validator on one URL per page type:
73 home, listing, entry, article, author
748. Analytics is receiving, and the referrer list is visible
75
76## Week one
77- [ ] Search Console Pages: indexed count against the route count in the
78 registry, and the reason given for every excluded URL
79- [ ] Search Console Queries: what the site is pulled up for. This is the
80 honest read on whether the pages answer real questions
81- [ ] Analytics referrers from chatgpt.com, perplexity.ai, claude.ai and
82 Gemini, recorded now as the baseline
83- [ ] After week one, monthly. Not daily
84
85## Standing rules
86- No slug ever changes without a redirect shipped in the same commit. Keep
87 the redirect map next to the content data, and add it before the first
88 rename, not after
89- The gate script grows when a new kind of gap ships. It never shrinks
90- A page that cannot earn a real description has a problem with the page,
91 not with the rule
92