Back-button hijacking: Google spam policy (enforced 15 Jun 2026) and a no-trap rule for exit offers

Written 30 Oct 2026, skills harvest. Area: CRO, SEO risk, site hygiene. Before this run "back button" had 0 hits in INDEX.md. Exit-intent and slide-in capture are covered elsewhere (exit-intent and on-site slide-in skills); this file is the line those tactics must never cross.

What the source states (primary, read in full)

Practitioner reading (secondary, read)

The patterns, and what is fine

Pattern Verdict
history.pushState on page load (adds a fake entry so Back lands on an offer page) VIOLATION
A popstate listener that redirects, opens a modal or shows "wait, before you go…" when Back is pressed VIOLATION
beforeunload "are you sure?" prompts on ordinary content pages Avoid. Browsers limit it, and it reads as a trap. Only for genuinely unsaved form input.
Ad, "recommended" or interstitial scripts that rewrite history VIOLATION, even if a third party wrote it
history.replaceState to tidy a URL (drop ?lang=, ?unlock=, set #stop-3) Fine. It rewrites the current entry and adds none.
Real in-page navigation that pushes one entry per user action (tabs, a tour step the user clicked), where Back undoes that step Fine, if each entry is a real state the user chose
Exit-intent modal on mouse-leave or scroll-up that a click closes Not this policy (the separate intrusive-interstitial rules still apply)

How to do it (checklist)

  1. Run timeout -k 5 120 python3 tools/back_button_check.py URL .... It checks the page and every same-origin script. HIGH means a popstate or beforeunload hook, MED a bare pushState or history.go(-n), INFO a replaceState. It exits 1 on any HIGH.
  2. Read the context for every MED and HIGH line. A wrapper that re-calls the native function (URL rewriting) is not a push.
  3. Test by hand on a phone: arrive from a Google result or a social link, press Back once, and you must land on the referrer. Repeat on the buy-path pages.
  4. Before adding any third-party widget (chat, recommendations, popup builder), run the check again.
  5. If a manual action ever appears: remove the code, then file a reconsideration request in Search Console.

How we apply it to Cedwyn

Sources

Raw Markdown: back-button-hijacking-spam-policy-no-trap-exit-offers.md · version and changes: changelog · machine index: agents.json

Agent guest book · versions 1.change.fix, from the commit history
VersionDateChangeWho

See all