It Worked Yesterday: Why Live Websites Quietly Break Over Time"
Quick answer: websites break after launch even when nobody touches the code, because the code is only one part of a website. Certificates expire, linked pages disappear, editors upload new…
Quick answer: websites break after launch even when nobody touches the code, because the code is only one part of a website. Certificates expire, linked pages disappear, editors upload new content, third-party scripts change, and browsers update themselves every few weeks. Each of these can break a page that was perfect on launch day. The fix is not to freeze your site. It is to keep checking it from the outside, on a schedule, long after the launch party is over.
In our last post, we looked at bugs that hide in the gap between your machine and a real visitor's. This one is about a different gap: the one between launch day and every day after it.
Most frontend developers treat launch as the finish line. Tests pass, the page ships, the ticket closes. But a website is not a finished painting. It is closer to a garden. Leave it alone long enough and things start to grow where they shouldn't, and wilt where they should be thriving.
In short: "nobody changed anything" is almost never true. Your code stayed the same, but the world around it didn't. Schedule regular checks of your live site, not just your pull requests.
Why a site breaks when nobody touches it
A modern website depends on a long list of things you don't control directly. Here is what a typical page leans on, and how often each part can change without a single commit from you:
| What your page depends on | Who controls it | How it changes |
|---|---|---|
| SSL certificate | Your host or certificate provider | Expires on a fixed date |
| Links to other pages and sites | Other teams and other websites | Pages get renamed, moved, or deleted |
| Images and text in the CMS | Content editors and marketing | Updated whenever someone publishes |
| Analytics, chat, and payment scripts | Third-party vendors | Updated on the vendor's schedule |
| The visitor's browser | Browser makers | Auto-updates every few weeks |
| Form delivery (email, CRM, webhooks) | Various services and API keys | Keys rotate, limits change, filters tighten |
Your code is the one thing on this list that stays still. Everything around it keeps moving.
What quietly breaks after launch
1. The certificate that quietly expires
SSL certificates have an expiry date. Auto-renewal usually handles it, until a DNS change, a moved domain, or a billing issue stops the renewal from running. When that happens, visitors don't see a small error. They see a full-page browser warning telling them your site is not safe, and most of them leave.
How to catch it: check certificate expiry dates for every domain and subdomain you own, not just the main one. Get an alert at least two weeks before expiry, so a failed renewal is a calm fix instead of an emergency.
2. The links that rot
On launch day, every link works. A few months later, the blog post you linked to has moved, a partner has redesigned their site, and someone renamed a product page without adding a redirect. Nothing in your code changed, but now some of your links lead to a 404 page.
How to catch it: crawl your site regularly and check every internal and external link. When you rename or remove a page yourself, add a redirect from the old address at the same time.
3. The content your layout was never designed for
You built the page with neat, placeholder-sized content. Then a content editor uploads a 6000-pixel photo straight from a camera, pastes a heading twice as long as you planned for, or adds a table to a column meant for short paragraphs. The layout you tested is not the layout visitors see anymore.
How to catch it: design components for the worst realistic content, not the demo content. Set size limits and automatic resizing for image uploads. Then check key pages after big content updates, not only after code deploys.
4. The third-party script that changed under you
Chat widgets, analytics tags, cookie banners, embedded forms, and payment buttons are loaded from someone else's servers. When the vendor ships an update, your page gets it too, without review. A new version can cover your "Buy" button, slow your page down, or throw an error that stops your own scripts from running.
How to catch it: keep a list of every third-party script on your site and who owns it internally. Make sure your core features still work if any one of those scripts fails to load, and watch for new console errors that you didn't cause.
5. The browser update that retired a feature
Browsers update themselves constantly, and every so often they change the rules. Autoplay policies tighten, third-party cookies get restricted, older APIs get deprecated, and CSS behaves slightly differently. A feature that worked for years can stop working for visitors on the newest browser version first.
How to catch it: keep an eye on deprecation warnings in your browser console, since browsers usually warn before they remove something. Re-test your main flows every few months, even if nothing in your code changed.
6. The form that stopped delivering
This one is especially painful because it looks fine from the outside. The visitor fills in the contact form, sees "Thanks, we'll be in touch," and waits. Meanwhile the message never arrives, because an API key was rotated, an email provider hit a sending limit, or a spam filter started catching everything from your form.
How to catch it: submit your own forms on a schedule and confirm the message actually arrives where it should, in the inbox or CRM, not just that the success message appears.
7. The slow creep in page weight
No single change makes a site slow. It happens gradually: a new tracking tag for a campaign, a bigger hero video, an extra font weight, a new widget from a vendor. Each addition looks harmless on its own. Six months later, the page that loaded quickly on launch day feels sluggish on a phone.
How to catch it: measure page speed on a schedule and compare against your launch numbers, not against yesterday. Agree on a rough budget for page weight, so every new addition has to earn its place.
8. The SEO basics that drift
On launch day, every page had a title, a description, and a sensible heading. Since then, new pages have been added in a hurry, a "noindex" setting was left on after a staging test, and the sitemap still lists pages that no longer exist. Search engines notice these things before you do.
How to catch it: audit titles, meta descriptions, headings, and indexing settings across the whole site regularly, not just on pages you are currently working on. New pages deserve the same checks as launch pages.
A simple post-launch routine
You don't need a dedicated maintenance team to stay ahead of these. A small, regular routine covers most of it:
| How often | What to check |
|---|---|
| Every day (automated) | Site is up, certificate is valid, no new console errors on key pages |
| Every week | Broken links, form delivery, page speed on your most visited pages |
| Every month | Third-party script list, SEO basics on new pages, layout on real devices |
| Every quarter | Main flows in the latest versions of Chrome, Safari, and Firefox |
The daily and weekly checks are the ones people skip, because they are repetitive and usually find nothing. That is exactly why they are worth automating.
Where automated scanning fits
A human is the best judge of whether a page still makes sense. A machine is the best judge of whether 400 links still work, whether a certificate is about to expire, and whether a new console error appeared overnight. Splitting the work that way means nobody has to remember to check everything by hand.
FlawPilot scans your live site from the outside and explains what it finds in plain language, so the day something breaks is the day you hear about it, not the day a customer emails you.
Frequently asked questions
Final Thoughts
Launch day is the best your website will ever look without help. From that moment on, certificates count down, links age, content grows, and browsers move forward. None of that is a failure of your code. It is just what happens to anything that lives on the web.
The teams that stay ahead of it aren't the ones who never have bugs. They are the ones who find out first. Put a few checks on a schedule, automate the repetitive ones, and "it worked yesterday" becomes something you say while fixing a small issue, not while explaining a big one.
How FlawPilot helps
FlawPilot finds security and quality issues in your AI-built app and shows you how to fix them. It checks your deployed site across security, performance, infrastructure, and SEO, and scans your source code for vulnerabilities, hardcoded secrets, and vulnerable dependencies.
Every finding is prioritized and explained in plain English, with the actual fix: the configuration change, DNS record, security header, or code change needed. For supported findings, AI-powered guidance adds step-by-step instructions and suggested code fixes.
Connect your Git provider to scan your repository alongside your live site, so application findings, code vulnerabilities, secrets, and dependency issues all land in one place.
It fits your existing workflow too: a REST API for scores and findings, an embeddable security badge, and an MCP server so tools like Claude, Cursor, or ChatGPT can read your findings and help you work through them.
The boundaries are clear: the public website scan reads only publicly accessible signals, with no agent or credentials required, and source-code scanning is opt-in and read-only. Fixes are never applied or merged without your review.
Verify your AI-generated app is production-ready.
117 security checks in 60 seconds - free, no account needed.
Scan one page
Enter a URL - no account, no install.
Run a Site Health check
Requires a free accountCrawls every page we can reach and scores each one, so a slow template deep in the site stops hiding behind a healthy homepage.
Scan your source code
Requires a free accountConnect a Git provider to check for vulnerabilities, secrets, and risky dependencies.