How I broke my SEO and slowly fixed it
My SEO dropped from 1k daily visitors to under 500 after a refactor, canonical mistakes, cross-posting errors, and a messy subdomain setup. This is what went wrong, what I fixed, and what I won’t repeat.
Published on December 16, 2025 by Michael AndreuzzaFor some of you, this won’t be news. Earlier this year, my SEO took a serious hit.
Back in January 2024, Lexington Themes was getting around 1,000 daily visitors. A few months later, I was struggling to reach 500 on a good day. Nothing dramatic happened overnight. No obvious Google update. Traffic just kept sliding until it was impossible to ignore.
This wasn’t bad luck.
This wasn’t Google being unpredictable.
This was me breaking my own site.
And yes, fixing it took much longer than it should have.
Where things started going wrong
The first real mistake happened during a large refactor.
At the time, everything looked fine. Pages loaded, builds passed, nothing appeared broken. But once I stopped and scanned the entire project properly, the problem became obvious: I had changed things I shouldn’t have touched in the first place.
Routes, redirects, canonicals, and parts of the build output all shifted during the refactor. Functionally, the site worked. From an SEO perspective, it didn’t.
I had removed or altered signals that search engines rely on, without realizing the impact.
The lesson here is simple:
a refactor without a full SEO review is asking for trouble.
Cross-posting without understanding the consequences
The second issue was entirely self-inflicted.
For a long time, I was publishing the same articles, word for word, on multiple platforms:
- Medium
- Hashnode
- Dev.to
- Peerlist
- and a few others
Cross-posting itself isn’t the problem. The problem is doing it without understanding how canonical URLs actually work.
Hashnode allows you to set canonicals, which sounds helpful. In my case, it wasn’t. My own site already had canonical issues, and I ended up copying those mistakes across platforms.
The result was predictable in hindsight:
- Identical content living on multiple domains
- Canonicals pointing to the wrong URLs
- Some canonicals pointing nowhere useful
- Conflicting signals everywhere
It was a mess.
How I cleaned it up
Fixing this properly meant going back through everything.
I reviewed over 80 posts across platforms, removed the long-form content, and replaced it with short summaries and links back to my site.
Hashnode was the worst offender. Instead of fixing posts one by one, I deleted the entire account and started fresh. The UX made cleanup painful, and a wrong backlink is worse than no backlink at all.
It was drastic, but it worked.
The server errors I didn’t expect
At one point, Google Search Console reported over 12,000 server errors.
I still don’t have a perfect explanation for all of them, but most fell into a few categories:
- Old redirects from before the rewrite
- Pages that no longer existed
- URLs Google kept crawling long after they were removed
I fixed these gradually. Some were easy, others required digging through old builds and deployment history.
What really kept coming back, though, were canonical issues.
Canonicals and Netlify’s pretty URLs
This is worth calling out clearly.
Don’t enable “pretty URLs” on Netlify unless you actually need them.
Pretty URLs automatically add a trailing slash. That means:
/page/page/
are treated as two separate URLs if your setup isn’t consistent.
Two URLs pointing to the same content means duplicated canonicals and confused signals. In my case, this amplified issues that already existed.
Netlify wasn’t the only cause, but it definitely made things worse.
Referral URLs creating more canonical problems
Just when things started stabilizing, another issue showed up.
Some referral URLs, mainly affiliate links, were being treated by bots as canonical pages. That led to yet another round of duplicated canonicals.
The fix wasn’t elegant, but it was effective:
- Block those referral URL patterns in
robots.txt - Make it clear which URLs should be indexed
Once those were excluded, canonical consistency improved.
Why I stopped using subdomains
For a long time, every Lexington theme lived on its own subdomain. It looked clean and organized.
In practice, it was a nightmare.
Each theme had 20+ pages. Every redesign meant renamed pages, removed pages, or structural changes. Multiply that across dozens of subdomains and you get constant crawl errors, missing assets, and outdated URLs lingering in Google Search Console.
Eventually, I moved everything under a single domain.
Errors dropped. Maintenance became manageable. Indexing stabilized.
Subdomains aren’t inherently bad, but they demand discipline. I didn’t have the time or patience to maintain that level of complexity anymore.
When things finally started improving
Around late September 2025, I started seeing signs that things were working again.
Errors declined. Indexing stabilized. Traffic stopped falling and began inching upward.
It wasn’t dramatic, but it was enough to confirm that the cleanup was paying off.
One unexpected upside during this period: my Domain Rating increased from 52 to 63 in under a month. That didn’t fix everything, but it was encouraging.
The SEO tools I actually use
I’ve mentioned audits and fixes a lot, but not the tools behind them.
I’m not using any paid SEO tools.
Here’s the full stack:
- Google Search Console – unavoidable
- Google Schema Validator – essential if you use JSON-LD
- Request Indexing – simple, but helpful
- Clean My SEO – good for quick checks
- Unlighthouse – the most useful tool in this entire process
- Astro Toolbar – invaluable during development
- Ahrefs free tier – limited, but still useful
- HubSpot – I tried it, didn’t get much value
Unlighthouse and Search Console did most of the heavy lifting.
Where things stand now
SEO is recovering.
It’s not finished, and it’s not perfect, but the trend is finally going in the right direction. I’ll share more numbers once things fully settle.
If there’s one takeaway from all of this, it’s simple:
SEO usually doesn’t break loudly.
It breaks quietly — and fixing it means undoing your own mistakes, one by one.
/Michael Andreuzza