The scariest launch bugs don't crash anything. The page loads, the build passes, and something is quietly wrong for every visitor.
We built this site in the week before launch and ran our usual checks on it. They caught eight problems. Not one of them produced an error message. Here is what we found, then the checklist we use on every site.
The 8 silent bugs
- The headline font never loaded. The page looked fine, just plainer than designed: every heading had fallen back to the system font. The cause was a font setting attached one level too low in the page structure, where the stylesheet couldn't read it. Caught by checking the computed font of a heading, not by looking.
- Every hovered link returned a 404. The site framework fetches the next page's data when a reader hovers a link. On a static host those files were saved under different names than the browser asked for, so every hover failed in the background and clicks got slower. Caught in the browser's console, not on the page.
- A phone page was 736 pixels wide on a 390-pixel screen. One long line of code in a tutorial stretched the whole layout. Caught by measuring page width at phone size on every page.
- The 404 page told Google it was the homepage. A site-wide canonical tag meant the "page not found" page pointed to the homepage as its main version. Caught by checking the canonical tag on the 404 page specifically.
- Images took no space until they loaded, then pushed the text down. Google counts that jump as layout shift. Caught because a screenshot showed a chart missing where it should be.
- A table had an empty header cell, and wide tables couldn't be scrolled with a keyboard. Caught by the accessibility test.
- Empty sections were open to Google. Category pages with no stories yet were indexable thin pages. Caught by checking robots tags on every listing page.
- Share images were saved without a file extension, so a host could send them with the wrong file type and social sites might not show them. Caught by fetching one and checking its type.
One more lesson: our own contrast checker once flagged white text on our red header as unreadable at 3.4 to 1. The real figure was 5 to 1. The checker couldn't read a newer color format the browser reports. Check the checker before you trust a failure, or a pass.
The checklist
Every page, two screen sizes
- Run an automated accessibility test (we use axe-core) against WCAG 2.1 AA on every page in the sitemap, at desktop width and at 390 pixels. Fix every violation.
- Measure page width at 390 pixels on every page. Anything wider than the screen is a bug.
- Tab through one page with the keyboard only. Every link and button should show a visible focus outline, in a sensible order.
Things that fail quietly
- Fonts: check the computed font family of a heading and a paragraph. Don't trust your eyes.
- The browser console: open it on the homepage, an article and a listing page, hover a few links, and read every error.
- Images: every image has alt text and a width and height set, so space is held before it loads.
- The 404 page: returns a real 404 status, has no canonical tag pointing elsewhere, and links somewhere useful.
Search basics
- robots.txt allows crawling and lists the sitemap.
- The sitemap lists every real page and nothing that's set to noindex.
- Every page has one H1, a unique title and description, and a canonical tag pointing to itself.
- Thin pages (empty categories, tag pages) are set to noindex until they have content.
- Structured data parses without errors.
Sharing
- Fetch one share image and check it's a real image file at least 1200 pixels wide.
- Paste a link into a social post draft to see the preview a reader will get.
Make it a script
Most of this list is scripted on this site. The content checks run inside every build, so a post that fails them can't be deployed at all. The accessibility test and the phone-width check are one command that tests every page in the sitemap, and we run it before every release. A checklist people have to remember gets skipped on the busy day you need it most. A script doesn't.




