The full checklist is run once for the project. These are the ones that can be right on the home page and wrong on the news archive, so they get run per template - and a template is any page that renders differently, not any URL.
Each item here is the same rule under the same id as on the checklist, not a second copy of it.
Every template 21 items
-
Images carry alt text that earns its place empty alt on decorative, never "image of" blocker
Every image has an alt attribute, decorative ones are empty, and reading the alt text of a page aloud conveys the same information as seeing it.
Without it, a screen reader reads out the filename instead, and a client-filled media library passes the scanner with alt text nobody wrote.
Standard Web Content Accessibility Guidelines (WCAG) 2.1 1.1.1 (A), in part
Developer The build proves it Why this rule exists About A11y
a11y.alt-textComment on this rule -
Every indexable page declares a self-referencing canonical one, absolute, on the live host blocker
Each sampled page returns one canonical, absolute, on the live host, equal to the URL that was requested once redirects have resolved.
Without it, one rename leaves 87 URLs canonicalising somewhere else, and the crawler consolidates the whole set onto the wrong address.
Automated check:
seo-status:canonicalVendor documentation Google Search Central documentation crawling-indexing/consolidate-duplicate-urls, in part
Developer The build proves it About SEO
seo.canonicalComment on this rule -
Production is indexable and staging is not driven by environment, never a checkbox blocker
The production home page carries no noindex in the meta robots or the X-Robots-Tag header, and its robots.txt does not disallow the whole site. Staging carries noindex everywhere.
Without it, a database pull from staging carries blog_public=0 into production and the site goes dark after a deploy that reported success.
Automated check:
seo-status:home-index,seo-status:robotsVendor documentation Google Search Central documentation crawling-indexing/block-indexing, in part
Developer The build proves it Why this rule exists About SEO
seo.no-noindex-leakComment on this rule -
The page survives 200 percent zoom and a 320px viewport no loss at 200%, no h-scroll at 320px, body text 16 px+ required
At 200 percent zoom no content is lost or overlapping, at 320px wide the page scrolls vertically only, and body text computes to at least 16 px at every sampled width.
Without it, body overflow-x hidden suppresses the measurable instead of passing it, and the clipped content is unreachable, not just off-screen.
Standard Web Content Accessibility Guidelines (WCAG) 2.1 1.4.10; 1.4.4 (AA), in part
Developer The build proves it About A11y
a11y.zoom-and-reflowComment on this rule -
Every page below the home page shows one breadcrumb trail one trail, root in page language, BreadcrumbList mirrors it required
Each sampled page below the home page shows exactly one trail, its root item in the page's language, its last item not a link, and its BreadcrumbList lists the same items in the same order under the same names. The Rich Results Test reports 0 BreadcrumbList errors.
Without it, the breadcrumb Google prints in the result is not the one on the page - wrong language, a level short, on every result for the site.
Vendor documentation Google Search Central documentation structured-data/breadcrumb#list-item, in part
Developer The build proves it About Crawl and indexation
crawl.breadcrumb-trailComment on this rule -
The content that must rank is in the server HTML h1, copy and links present with JavaScript off required
curl on one URL of each template returns HTML containing the h1 text, the first paragraph of body copy and every link in the main navigation. Nothing that has to rank appears only once JavaScript has run.
Without it, the copy that has to rank waits in a render queue that may never come round, and DevTools shows it present the whole time.
Vendor documentation Google Search Central documentation javascript-seo-basics#how-googlebot-processes-javascript, in part
Developer The build proves it About Crawl and indexation
crawl.content-in-server-htmlComment on this rule -
Slugs are readable, hyphenated and in the page's language no ids, no dates, under 115 chars, page's language required
Every URL in the crawl is under 115 characters, separates words with hyphens rather than underscores, carries no numeric id or date segment, and is in the same language as the page it serves. 0 exceptions across the sampled templates.
Without it, an English page ends up served on a French slug, or /?cat=38 in the results, and fixing it after launch means redirects and a fresh crawl.
Client document Technical SEO control grid row 60not public
Developer The build proves it About Crawl and indexation
crawl.url-formatComment on this rule -
Every template is opened in all three browser engines Blink, Gecko and desktop WebKit - three passes required
Every template on the template list has been opened in Chrome, Firefox and desktop Safari - three engines, none checked in fewer - and each difference found is either fixed or written down.
Without it, a Firefox-only break ships because every check ran in Chromium, and the client's own team is the one that finds it.
Client document Website Design and Development Checklist section 15, item 4, in partnot public
Developer The build proves it About Launch and handover
delivery.browser-matrixComment on this rule -
Form inputs are 16 pixels so iOS does not zoom on focus 16 px computed at 390 px, and pinch-zoom still works required
Only when the project has a form that collects data from a visitor.
At a 390px viewport, every input, select and textarea computes to 16px or more, focusing one does not change the page scale, and the viewport meta sets neither user-scalable=no nor a maximum-scale.
Without it, tapping the email field on an iPhone zooms the page in and leaves the rest of the form off the right edge with no way back.
Client document Website Design and Development Checklist section 4, item 1, in partnot public
Developer The build proves it About Forms
forms.input-font-sizeComment on this rule -
One h1 per page, and no skipped heading levels required
Each sampled page has exactly one h1, no two sampled pages share an h1, and the heading outline never jumps a level going down, for example h2 straight to h4.
Without it, a screen-reader user skimming by heading level hits an h3 under an h1 and cannot tell which section it belongs to.
Standard Web Content Accessibility Guidelines (WCAG) 2.1 1.3.1 (A), in part
Developer The build proves it About HTML
html.single-h1Comment on this rule -
Structured data says what the page actually says type fits the page, values match the rendered copy required
On three sampled pages every emitted value matches the rendered page: headline equals the visible title, author is a name rather than a language code, dates match, and no rating, price or count is emitted that the page itself does not show.
Without it, Google is told the article is 8 words long when 659 are on screen, and the validator that would catch a typo reports it all green.
Automated check:
seo-status:org-brand,seo-status:org-sameasVendor documentation Google Search Central documentation appearance/structured-data/sd-policies, in part
Developer The build proves it About On-page signals
onpage.schema-fidelityComment on this rule -
Images ship in a modern format at the size they display WebP or AVIF with srcset and sizes, 200 KB per image at most required
No image transfers more than twice the bytes needed at its displayed size, the image audits report no meaningful savings from format or sizing, no single image exceeds 200 KB on the wire, and no animated GIF is served.
Without it, a phone on mobile data downloads the 2000px desktop hero to paint it 390px wide, several times the bytes it needed.
Vendor documentation Web Vitals choose-the-right-image-format, in part
Developer The build proves it About Perf
perf.image-formatsComment on this rule -
Each template has a transfer and DOM budget under 2 MB without video, 1400 elements or measured required
First-load transfer is under 2 MB per sampled template, video excluded, and anything over names its three largest resources. Element count is under 1400, or over it with a median mobile TBT at or under 200 ms recorded on the largest page that template renders.
Without it, a template renders 2774 DOM elements against a 1400 budget, and every style recalc and scroll handler pays for all of them.
Client document Technical SEO control grid rows 134, 139, in partnot public
Developer The build proves it About Perf
perf.page-weightComment on this rule -
The layout survives the phone's real viewport nothing clipped by the toolbar or notch, landscape usable required
On a real phone at 390x844: no section clipped by the browser toolbar in either orientation, no text or control under the notch or home indicator, and a sticky header at 15 percent of viewport height or less in landscape.
Without it, the phone's home indicator sits on top of the fixed CTA bar, and the visitor cannot tap the one button that matters.
Client document Website Design and Development Checklist section 11, item 5, in partnot public
Developer The build proves it About Practices
practices.mobile-viewport-chromeComment on this rule -
The layout holds at every width, not just the design widths 320 to 2560, no h-scroll, no overlap required
No horizontal scrollbar at any width from 320 up, no clipped or overlapping content, and no layout that only works at the exact design breakpoints.
Without it, a 900px laptop sits between two drawn widths, and nobody opens one before launch, so that is where the heading lands on the image.
House rule Delivered reference builds, audited together one breakpoint map plus body overflow-x hidden, both buildsnot public
Developer The build proves it About Practices
practices.responsive-breakpointsComment on this rule -
No internal link is broken no 404, no 5xx, no chain over one hop required
A crawl of the sampled pages returns no 404 and no 5xx on internal links, and no chain of more than one redirect.
Without it, a published page sits twice in the main menu and 404s from every template on the site, reaching the sitemap before anyone notices.
Automated check:
seo-status:link-ok,seo-status:linkVendor documentation Google Search Central documentation crawling/docs/troubleshooting/http-status-codes, in part
Developer The build proves it About SEO
seo.internal-links-resolveComment on this rule -
Open Graph and Twitter card tags are complete 8 tags, absolute og:image at 1200x630 required
All eight tags are present on a sampled page, og:url matches the canonical, and the og:image URL is absolute and returns an image of at least 1200 by 630.
Without it, the client shares the launch post on LinkedIn and gets a grey box with a bare URL where the brand image should be.
Standard The Open Graph protocol og:title, og:type, og:image, og:url, in part
Developer The build proves it About SEO
seo.open-graphComment on this rule -
The sitemap lists every indexable URL and nothing else one generated sitemap, all 200, none noindex required
The sitemap index returns 200, every child returns 200, a sample of ten listed URLs returns 200 with no redirect, and no listed URL carries noindex. Only one sitemap source answers; the other returns 404, and robots.txt names the one that does.
Without it, seven URLs in one live sitemap answer 404, six of them category archives with no template, and the crawler is handed them on purpose.
Automated check:
seo-status:sitemap,seo-status:tax-sitemapsVendor documentation Google Search Central documentation crawling-indexing/sitemaps/build-sitemap, in part
Developer The build proves it About SEO
seo.sitemapComment on this rule -
Structured data is present, valid and singular one node per type per page, no errors required
Google's Rich Results Test reports no errors on the home page and one interior page, and exactly one Organization node exists per page with a name matching the brand.
Without it, two Organization nodes give Google two different names for the brand, and nobody decides which one it takes.
Automated check:
seo-status:org-one,seo-status:org-brand,seo-status:org-sameasVendor documentation Google Search Central documentation appearance/structured-data/intro-structured-data, in part
Developer The build proves it About SEO
seo.structured-dataComment on this rule -
Titles and descriptions are present, unique and the right length titles 30-60, descriptions 70-160, one of each per page required
No sampled page is missing a title or description, no two sampled pages share either, lengths sit in range, and each page carries exactly one title element, one description and one robots meta.
Without it, two templates share one title, so the results give no way to tell the pages apart and Google rewrites the title link itself.
Vendor documentation Google Search Central documentation appearance/title-link, in part
Developer The build proves it About SEO
seo.title-descriptionComment on this rule -
The current page is marked in the navigation exactly one aria-current=page per navigation required
On five pages including one section landing page, the main navigation carries exactly one aria-current="page" and it is the item for the URL loaded. No other navigation on the page carries more than one.
Without it, a screen-reader user tabbing through the menu gets nothing saying which item is the page they are already standing on.
Client document Website Design and Development Checklist section 3, item 7, in partnot public
Developer The build proves it About Interface states
states.current-pageComment on this rule
The golden minimum
One piece of content, one indexable URL, self-canonical to a 200, in the sitemap only if it is indexable, utility pages noindex without a Disallow, at least one real HTML link pointing at it, and no two signals saying different things.