Killed 13 dead in-page anchors across cyber + ROI calc
Five `#contact-booking` anchors in the cybersecurity service page and ROI calculator pointed nowhere — they now route to /pricing, /audit, and /contact based on CTA intent. Four `#hero` and four `#scan` anchors on /services/cybersecurity (smooth-scroll-to-nothing) now go to /audit, the actual scanner page. Verified the remaining 22 in-page anchors site-wide all have valid `id=` targets (some assigned dynamically via `id={g.id}`).
Affected routes
/services/cybersecurity/audit/contact/pricingBuilt on tools you trust
← swipe · 12 tools →
What we fixed
Thirteen href="#X" anchors had no matching id="X" target on the rendered page — they smooth-scrolled to the top of the same page and did nothing useful. Each is now a real route navigation:
- Five `#contact-booking` anchors on
/services/cybersecurityandBreachROICalculator→ routed to/pricing(lock-in CTA),/audit(gap report),/contact(custom integration / scoping call / 90-day plan). - Four `#scan` anchors →
/audit(the actual scanner landing page). - Four `#hero` anchors (one with a now-pointless
window.scrollTo({top:0})onClick) →/audit. Removed the dead onClick.
Why these were broken
The anchors looked like plain in-page navigation, but grep id= proved no element on the rendered page actually carried those ids. They were either left behind from a refactor (#contact-booking was an old booking-form section) or aspirational targets that never shipped (#hero and #scan assumed a hero scanner that lives on /audit, not on this page). Click-throughs went nowhere. PostHog cta_click events fired, but no destination conversion was possible.
Site-wide audit
After fixing, ran a complete inventory: 22 distinct in-page anchor patterns across src/. All others verified valid:
- Same-file anchors (
#tiers,#sku-grid,#register,#proof-system,#funnel-lead-form,#alternatives,#faq,#compare,#main-content) — same-file id, valid. - Cross-component anchors (
#bounties,#apps,#algos,#liveon /labs ·#case-gridon /work ·#full-comparisonon /alternatives/[competitor] ·#applyon /jobs/[slug] ·#skus) — confirmed both source component and id-bearing target component mount on the same page. - Dynamically-assigned ids (
#productized,#agencies,#in-houseon /compare) — set viaid={g.id}from theGROUPSdata array. Valid.
Net: zero in-page anchors that don't resolve. Every CTA click now goes somewhere that can convert.
See the full changelog
Or peek at what we’re building next on the roadmap.