Normalize a URL for loop comparison: drop the hash fragment and any
app-declared volatile query params, keep everything else. Two visits to the
"same page" then produce equal strings even if a per-visit token differs.
Never throws — a non-URL string is returned trimmed.
Normalize a URL for loop comparison: drop the hash fragment and any app-declared volatile query params, keep everything else. Two visits to the "same page" then produce equal strings even if a per-visit token differs. Never throws — a non-URL string is returned trimmed.