Returning a 404 for a listing that existed and was indexed tells Google the URL is permanently gone with no context, which kills any inbound links and external citations built up over the listing's lifetime. Users who clicked a remembered link or a review site referral get a generic not-found page and assume the entire directory is broken. A dedicated closed-listing page preserves the URL for link equity, explains what happened, and offers alternatives (nearby listings, contact the business) that keep the session alive.
Low because the 404 response does not corrupt data, but it wastes accumulated SEO equity and trust for closed pages.
Check the listing status in the route handler and render a ListingClosed component with a 410 Gone status when the listing is closed or inactive. Keep the URL live so inbound links land on a meaningful page. Implement the branching in src/app/listings/[slug]/page.tsx and add visual treatment (muted colors, closed badge) that clearly distinguishes closed from active listings.
if (listing.status === 'closed' || listing.status === 'inactive') {
return <ListingClosed listing={listing} suggestions={nearby} />
}
Set the response status to 410 in generateMetadata or a route segment config.
ID: directory-listing-schema.image-handling.closed-listing-handling
Severity: low
What to look for: Enumerate all listing status values. For each status, find the listing detail route handler. Check how it handles listings marked as closed, inactive, or deleted. Does it return a 404, a 410 Gone, or a special "closed" page with a message?
Pass criteria: Closed or inactive listings redirect to (or render) a "Listing Closed" page with an explanation, not a 404 error — 100% of closed or inactive listings must be visually distinguished from active ones. Report: "X listing statuses found, closed/inactive properly handled."
Fail criteria: Closed listings return a 404 error, leaving users confused.
Skip (N/A) when: There's no concept of closed/inactive listings.
Do NOT pass when: Closed listings appear identical to active listings with no visual indicator of their status.
Detail on fail: Example: "Closed listings return 404 error instead of a 'This listing is no longer active' message"
Remediation: Add a status check and conditional response:
if (listing.status === 'closed' || listing.status === 'inactive') {
return NextResponse.json({
status: 'closed',
message: 'This listing is no longer active'
}, { status: 410 })
}