The SidRatnam Web Standard

77 checks. A site ships only when it passes.

This is the baseline every website the SidRatnam builder produces gets by default, and the list the release gate checks before anything goes live. 56 lines apply to every site; 21 more apply to sites that sell. Every failure blocks the release. A line the gate could not see is marked INCOMPLETE, and that blocks the release too: a check that passes what it could not see is not a check.

Lighthouse thresholds

MeasureRequired
Performance≥ 90 on mobile, every sampled page
Accessibility≥ 95, mobile and desktop
Best Practices≥ 95, mobile and desktop
SEO≥ 95, mobile and desktop
Largest Contentful Paint< 2.5 s, mobile and desktop
Cumulative Layout Shift< 0.1, mobile and desktop

The 77 lines

Favicon set

CheckHow it is decidedApplies to
/favicon.ico served, multi-size (16/32/48)HTTP checkEvery site
favicon-16x16.png and favicon-32x32.png at their exact sizesHTTP checkEvery site
apple-touch-icon.png 180×180HTTP checkEvery site
site.webmanifest with name, theme_color and 192/512 icons that resolveHTTP checkEvery site
Every page links icon, apple-touch-icon and manifest, and sets theme-colorPage sourceEvery site

Head basics

CheckHow it is decidedApplies to
Every page has a <title>Page sourceEvery site
Every page has a meta descriptionPage sourceEvery site
Every page has an absolute rel=canonicalPage sourceEvery site
og:title, og:description, og:url, og:type and og:image on every pagePage sourceEvery site
og:image is a 1200×630 JPEG/PNG (never WebP)HTTP checkEvery site
twitter:card summary_large_image with an imagePage sourceEvery site
<html lang> on every pagePage sourceEvery site
Responsive viewport meta on every pagePage sourceEvery site

SEO and indexing

CheckHow it is decidedApplies to
robots.txt allows crawling and names the sitemapHTTP checkEvery site
XML sitemap is valid and every sampled URL is a real pageHTTP checkEvery site
Sitemap submitted to Google Search Console (where a GSC key exists)Recorded evidenceEvery site, on the live domain
Organization (with legalName) and WebSite JSON-LD on the homepage, all JSON-LD parsesPage sourceEvery site
Product pages carry Product + Offer (price, currency, availability)Page sourceSites that sell
Inner pages carry BreadcrumbList JSON-LDPage sourceEvery site
Unknown URLs return a real 404 with a branded page (no soft 404)HTTP checkEvery site
The other trailing-slash form 301s to the canonical URLHTTP checkEvery site, on the live domain
www and apex: the non-canonical host 301s to the canonical oneHTTP checkEvery site, on the live domain
http:// 301s to https://HTTP checkEvery site, on the live domain
Strict-Transport-Security max-age ≥ 180 daysHTTP checkEvery site, on the live domain
Ads landing pages are noindex and carry a canonicalPage sourceEvery site

Verification hooks

CheckHow it is decidedApplies to
google-site-verification (meta from env GOOGLE_SITE_VERIFICATION, or DNS TXT)DNS lookupEvery site, on the live domain
p:domain_verify (meta from env PINTEREST_DOMAIN_VERIFY, or DNS TXT)DNS lookupSites that sell, on the live domain

Legal

CheckHow it is decidedApplies to
Privacy policy page, linked from every pageHTTP checkEvery site
Terms page, linked from every pageHTTP checkEvery site
Refunds/returns page, linked from every pageHTTP checkSites that sell
Contact page, linked from every pageHTTP checkEvery site
Legal-entity name in the footer of every page and as Organization.legalNamePage sourceEvery site
Privacy policy names every analytics/ad pixel the site actually loadsHTTP checkEvery site
No visible "AI-generated" style labelsPage sourceEvery site

Analytics and consent

CheckHow it is decidedApplies to
A consent banner / Consent Mode default-denied wherever a tracker loadsPage sourceEvery site

Email

CheckHow it is decidedApplies to
SPF record on the apex (exactly one v=spf1)DNS lookupEvery site, on the live domain
DKIM record for the sending provider (resend._domainkey or a configured selector)DNS lookupEvery site, on the live domain
DMARC record at _dmarcDNS lookupEvery site, on the live domain
MX records exist so support@ can receive mailDNS lookupEvery site, on the live domain
Transactional sender domain verified for Resend (send.<domain> MX + SPF, resend._domainkey)DNS lookupEvery site, on the live domain

Performance and accessibility

CheckHow it is decidedApplies to
Content images are WebP/AVIF (or <picture> with a WebP/AVIF source)Page sourceEvery site
Every <img> has width and heightPage sourceEvery site
Large content images have srcset and sizesPage sourceEvery site
Below-the-fold images are loading="lazy"Page sourceEvery site
Image filenames are content-hashed (or versioned) for long cachingPage sourceEvery site
Every <img> has an alt attributePage sourceEvery site
Animations honour prefers-reduced-motionHTTP checkEvery site
Colour contrast passes (Lighthouse color-contrast)LighthouseEvery site
Keyboard and names: no positive tabindex, every button/link has a nameLighthouseEvery site
Lighthouse Performance ≥ 90 on mobile (every page)LighthouseEvery site
Lighthouse Accessibility ≥ 95, mobile and desktopLighthouseEvery site
Lighthouse Best Practices ≥ 95, mobile and desktopLighthouseEvery site
Lighthouse SEO ≥ 95, mobile and desktopLighthouseEvery site
LCP < 2.5 s, mobile and desktopLighthouseEvery site
CLS < 0.1, mobile and desktopLighthouseEvery site

Security headers

CheckHow it is decidedApplies to
Content-Security-Policy (enforced, not report-only)HTTP checkEvery site, on the live domain
Referrer-PolicyHTTP checkEvery site, on the live domain
X-Content-Type-Options: nosniffHTTP checkEvery site, on the live domain
Permissions-PolicyHTTP checkEvery site, on the live domain

Commerce: buying flow

CheckHow it is decidedApplies to
On-site Stripe Elements checkout — never a hosted/embedded Stripe redirectBrowser walkSites that sell
Wallet buttons (Apple Pay / Google Pay / Link) on the product page and in the cartBrowser walkSites that sell
Add-to-cart opens a drawer; the page does not changeBrowser walkSites that sell
Sticky buy bar on mobile product pagesBrowser walkSites that sell
Free-shipping progress meter in the cartBrowser walkSites that sell
Guest checkout — no forced account, no password fieldBrowser walkSites that sell
Landing → payment form within the click budget (default 4 taps)Browser walkSites that sell

Commerce: pricing honesty

CheckHow it is decidedApplies to
A card price is the price of the exact item pictured — no "From $X" from a cheaper formatPage sourceSites that sell
The detail page offers every format the product is sold inPage sourceSites that sell

Commerce: growth loop

CheckHow it is decidedApplies to
aggregateRating JSON-LD only from real, moderated reviewsPage sourceSites that sell
Post-delivery review-request emails with moderationRecorded evidenceSites that sell
Google Customer Reviews opt-in on the order confirmation, badge on siteRecorded evidenceSites that sell, on the live domain
Abandoned-cart remindersRecorded evidenceSites that sell
Customer photo wall (moderated UGC)Recorded evidenceSites that sell
Referral program hooks (give-10%/get-10% pattern)Recorded evidenceSites that sell
Email links tagged utm_source=email, utm_medium=lifecycle|transactional, utm_campaign=<flow>Recorded evidenceSites that sell

Commerce: channels

CheckHow it is decidedApplies to
Product feed for Google Merchant Center / Meta / Pinterest (JPEG/PNG image_link)HTTP checkSites that sell
Checkout links ?products=id:qty (Meta) and ?id= (Google) land on a real cart pageHTTP checkSites that sell

Our own score

sidratnam.com is measured with the same gate. On 30 October 2026 it passed 32 of the 55 lines that apply to it, failed 22, and 1 could not be checked from outside. The open items: the full favicon set and web manifest, 1200×630 PNG/JPEG social images, Twitter cards on every page, soft-404 and trailing-slash duplicates, image dimensions, srcset and lazy loading, mobile Performance and LCP on the homepage, colour contrast, a script-protecting Content-Security-Policy, and naming every analytics service in the privacy policy. We are fixing them, and we will not call it a pass until it is one.

See how your site measures up →