Automated staleness warnings sent after 90 days without verification
Why it matters
Stale directory listings are the primary user trust failure for directories: a restaurant that closed 18 months ago still showing 4.5 stars with no freshness signal sends users to a shuttered door. Schema-org dateModified enables recency scoring by search engines and AI crawlers — but only if the field reflects actual verification, not the creation date. Without automated staleness detection and owner alerts at 90 days, your directory degrades passively: every listing drifts toward inaccuracy while appearing current. Data-integrity and observability taxons both apply here — the system must monitor its own data freshness, not rely on owners to self-report changes.
Severity rationale
High because undetected stale listings cause real-world user harm (visiting closed businesses, calling disconnected numbers) and erode the directory's core trust proposition over time.
Remediation
Add a scheduled route (or Vercel cron job) that queries listings with dateVerified older than 90 days and sends owner alerts. Run it daily.
// src/app/api/cron/stale-listings/route.ts
export async function GET(request: Request) {
// Verify cron secret
if (request.headers.get('Authorization') !== `Bearer ${process.env.CRON_SECRET}`) {
return new Response('Unauthorized', { status: 401 });
}
const ninetyDaysAgo = new Date(Date.now() - 90 * 24 * 60 * 60 * 1000);
const stale = await db.listing.findMany({
where: { dateVerified: { lt: ninetyDaysAgo }, status: 'active' },
select: { id: true, ownerEmail: true, name: true },
});
for (const listing of stale) {
await sendVerificationReminderEmail(listing.ownerEmail, listing.name);
}
return Response.json({ processed: stale.length });
}
Register this route in vercel.json under crons with a daily schedule ("0 9 * * *"). Display a staleness badge on the listing UI when dateVerified is more than 90 days old.
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 Listing Data & Schema Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
External references
- schema-org · dateModified — dateModified used to detect stale listings beyond 90-day threshold
Taxons
History
- 2026-04-18·v1.0.0·Initial import from directory-listing-schema·automated