PupVax (https://pupvax.com) has been getting about 200 Google impressions per month but zero clicks. Zero.
That felt wrong. If Google is showing your pages, why would nobody click?
I finally dug into the production HTML and found the answer: every page title had corrupted characters. The em dash (—) I used in my Next.js source files turned into replacement characters (��) in the deployed output.
Here is what the title looked like in Google SERPs:
2026 Dog Vaccines Explained �� Core, Non-Core and the Full Schedule | PupVax | 2026 Dog Vaccine Tracker
Three problems in one title:
- Mo -jibake (corrupted characters) — looks broken and untrustworthy
- Double branding — the page said | PupVax and the layout template added | 2026 Dog Vaccine Tracker
- Too long — Google truncates at around 60 characters
The fix (8 pages, one variable)
I went through all 8 pages with em dashes and:
- Replaced — with ASCII colon :
- Removed page-level | PupVax (layout template handles branding)
- Kept everything else the same — same content, same pages, same backlinks
Example:
- Before: 2026 Dog Vaccines Explained — Core, Non-Core and the Full Schedule | PupVax
- After: 2026 Dog Vaccines Explained: Core, Non-Core and the Full Schedule | 2026 Dog Vaccine Tracker
Clean, single-branded, no corrupted characters.
Deploy and verify
npm run build passed. Pushed to GitHub. Cloudflare Pages Actions deployed. Verified production HTML — titles are clean.
What I learned
A broken character in a title is not a minor thing. If Google shows your page 200 times and the title looks corrupted, of course nobody clicks. The em dash is a valid UTF-8 character, but something in the Next.js static export or Cloudflare Pages pipeline mangled it. ASCII is safer for metadata.
The bigger picture
I am maintaining 8 small browser tools (all open source on GitHub at Gavin1901). Yesterday freetdee.com got its first click after weeks of sitemap fixes and title optimization. Today I fixed PupVax titles. ZonePlan has 4 indexed URLs out of 89 — that is the next one to tackle.
All 8 tools: https://github.com/Gavin1901/free-browser-tools-index
No frameworks. No SaaS pricing. Just small tools that solve one job, deployed on Cloudflare Pages, pushed by GitHub Actions.
Top comments (0)