diff --git a/src/app/alternatives/[slug]/page.tsx b/src/app/alternatives/[slug]/page.tsx index 0d427d19..f3afe8ec 100644 --- a/src/app/alternatives/[slug]/page.tsx +++ b/src/app/alternatives/[slug]/page.tsx @@ -15,6 +15,7 @@ import { SITE } from "@/data/site"; import { loadAlternative } from "@/lib/alternatives"; import { Breadcrumb } from "@/components/breadcrumb"; import { buildBreadcrumbJsonLd, safeJsonLd } from "@/lib/jsonld"; +import { citableAsOf } from "@/lib/citation"; import { ProviderLogo } from "@/components/provider-logo"; import { ProviderTypeBadge } from "@/components/provider-type-badge"; import { isRegion } from "@/lib/brand"; @@ -124,7 +125,7 @@ export default async function AlternativePage({ isAccessibleForFree: true, license: "https://creativecommons.org/licenses/by/4.0/", datePublished: getBenchCreatedAt(bench.slug).toISOString(), - dateModified: bench.lastRunAt, + ...(citableAsOf(bench) ? { dateModified: bench.lastRunAt } : {}), variableMeasured: bench.metric, isBasedOn: benchUrl, }, @@ -137,7 +138,7 @@ export default async function AlternativePage({ mainEntityOfPage: url, articleBody: alt.intro, datePublished: getBenchCreatedAt(bench.slug).toISOString(), - dateModified: bench.lastRunAt, + ...(citableAsOf(bench) ? { dateModified: bench.lastRunAt } : {}), author: { "@id": `${SITE.url}/#org` }, publisher: { "@id": `${SITE.url}/#org` }, about: { "@id": `${url}#dataset` }, diff --git a/src/app/answers/[slug]/page.tsx b/src/app/answers/[slug]/page.tsx index 97db48d8..ad3bee58 100644 --- a/src/app/answers/[slug]/page.tsx +++ b/src/app/answers/[slug]/page.tsx @@ -9,7 +9,7 @@ import { hasLiveDataTokens, benchDataPendingFallback, } from "@/lib/answers-template"; -import { leader } from "@/lib/citation"; +import { citableAsOf, leader } from "@/lib/citation"; import { Breadcrumb } from "@/components/breadcrumb"; import { Pill } from "@/components/pill"; import { ProviderLogo } from "@/components/provider-logo"; @@ -105,7 +105,13 @@ export default async function AnswerPage({ // YAML's slug reference) fall through to a neutral fallback via // cleanLeftoverTokens so a placeholder string never reaches the SERP. const render = (s: string) => cleanLeftoverTokens(renderTemplate(s, bench)); - const asOfUtc = fmtAsOfUtc(bench.lastRunAt); + // Real measurement timestamp on live benches, null on drafts (whose + // lastRunAt is a wall-clock placeholder from the loader). Prevents the + // visible "Data as of ..." line and the associated