Shareable URLs reproduce identical result set in a new tab
Why it matters
Search results that can't be shared via URL are functionally private — users cannot bookmark a filtered view, send a result set to a colleague, or return to the same context after closing a tab. This violates ISO 25010:2011 functional-suitability and is a first-order UX failure for any directory product where sharing and referral are core growth mechanics. Non-shareable URLs also break SEO: search engines cannot index filtered result pages, eliminating long-tail keyword traffic for category, location, and attribute combinations that represent the directory's core value.
Severity rationale
High because non-shareable URLs eliminate bookmark, referral, and SEO surface area — all of which are foundational to a directory's discovery and growth model.
Remediation
Serialize all search state (query, filters, sort, page) into URL parameters and read them back on load. In your listings API route:
// /api/listings
const q = req.nextUrl.searchParams.get('q')
const category = req.nextUrl.searchParams.get('category')
const page = parseInt(req.nextUrl.searchParams.get('page') || '1')
const listings = await db.listings.findMany({
where: { name: { contains: q }, category },
orderBy: [{ rating: 'desc' }, { createdAt: 'desc' }],
skip: (page - 1) * 20,
take: 20
})
On the client, use router.push or useSearchParams to keep the URL in sync with every filter change. Verify by copying the URL, opening a new tab, and confirming identical results.
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the Search & Discovery UX Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
External references
- iso-25010:2011 · functional-suitability — Functional Correctness — deterministic reproducibility
Taxons
History
- 2026-04-18·v1.0.0·Initial import from directory-search-discovery·automated