Storing a field users submitted but never rendering it silently drops the value they trusted you to display. Phone numbers missing from listing pages cost the business real leads; missing hours send customers to closed locations; missing addresses break local SEO signals and schema.org LocalBusiness structured data. Users who submitted via a suggest-an-edit form conclude the system is broken and stop contributing. Directory trust collapses quickly when visible data does not match what submitters remember providing.
High because dropped fields degrade listing quality, undermine user contributions, and weaken local SEO extraction.
Audit the listing detail template against your Prisma or SQL schema and render every populated column. Add an automated test that fetches a fully-populated fixture and asserts each schema field appears in the rendered HTML, so future schema additions cannot silently bypass the UI. Keep the rendering in a single ListingDetail component at src/components/listings/listing-detail.tsx.
export default function ListingDetail({ listing }: { listing: Listing }) {
return (
<article>
<h1>{listing.name}</h1>
<p>{listing.description}</p>
{listing.phone && <a href={`tel:${listing.phone}`}>{listing.phone}</a>}
{listing.address && <address>{listing.address}</address>}
{listing.hours && <Hours value={listing.hours} />}
</article>
)
}
ID: directory-listing-schema.content-completeness.fields-displayed
Severity: high
What to look for: Enumerate every field in the listing schema. For each field, examine the listing detail page template. For each field in the database schema (name, description, phone, address, category, hours, etc.), verify it's rendered on the page if present. Look for any fields that are stored but not displayed.
Pass criteria: Every core field (name, description, category, contact, location) that is stored in the database is displayed on the listing page when present — at least 80% of populated schema fields must be visible in the listing detail page. Report: "X schema fields found, Y displayed in the UI."
Fail criteria: Any core field is stored but never rendered on the page (silently dropped).
Skip (N/A) when: Never — all data should be visible to users.
Detail on fail: Example: "Email field is stored in database but never displayed on listing page" or "Business hours data exists but is not rendered"
Remediation: Render all fields in the listing detail page:
export default function ListingDetail({ listing }) {
return (
<div>
<h1>{listing.name}</h1>
<p>{listing.description}</p>
{listing.phone && <p>Phone: {listing.phone}</p>}
{listing.address && <p>Address: {listing.address}</p>}
</div>
)
}