# Blog/article schema includes dates

- **Pattern:** `ab-001539` (`geo-readiness.ai-readable-structure.article-dates-in-schema`)
- **Severity:** low
- **Lifecycle:** active
- **Last modified:** 2026-06-10
- **Canonical URL:** https://auditbuffet.com/patterns/ab-001539
- **License:** CC-BY-4.0 — attribute to AuditBuffet Pattern Catalog (https://auditbuffet.com/patterns/ab-001539)

## Why it matters

Freshness is one of the few signals AI-search vendors name in their own docs. Microsoft is explicit that staleness is worse in AI answers than in ranking — "In search, stale content degrades ranking. In grounding, a stale fact produces a misleading response" — and lists "regular updates" among its AI-citation guidance; Google describes its AI features as retrieving "up-to-date web pages from our Search index." The cross-vendor way to declare freshness is visible dates on the page (covered by `publication-dates-visible`) plus an accurate sitemap `lastmod` (Bing calls it "a key signal" for AI answers). `datePublished`/`dateModified` in Article or BlogPosting schema is the structured, Bing-side bonus on top of those: machine-readable dates generated from the same source as the visible ones, so the two never disagree.

## Severity rationale

Low because schema dates are a structured bonus on top of visible dates and sitemap lastmod (the cross-vendor freshness signals); absence costs a Bing-side signal, not indexing.

## Remediation

Add Article or BlogPosting JSON-LD to each blog post with at least `datePublished` set. Generate the schema at render time from your post's frontmatter or CMS metadata so dates stay accurate.

```tsx
// app/blog/[slug]/page.tsx
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify({
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": post.title,
  "datePublished": post.publishedAt,   // ISO 8601: "2026-04-02"
  "dateModified": post.updatedAt ?? post.publishedAt,
  "author": { "@type": "Person", "name": post.author }
})}} />
```

At minimum, `datePublished` is required. Including `dateModified` when content is updated signals freshness to AI systems more precisely — a post from 2024 updated in 2026 should reflect the 2026 `dateModified` date.

## Detection

- **ID:** `article-dates-in-schema`
- **Severity:** `low`
- **What to look for:** If blog posts or articles exist, count all blog/article page routes. Search for Article or BlogPosting JSON-LD schema — look for `"@type": "Article"` or `"@type": "BlogPosting"` in structured data blocks. If found, check whether `datePublished` and `dateModified` fields are present. Count how many blog pages have schema with dates vs. total blog pages.
- **Pass criteria:** Count all blog/article pages. At least 1 blog or article page must have Article/BlogPosting JSON-LD schema with at least the `datePublished` field set. If multiple blog pages exist, at least 80% should have Article schema with `datePublished`. Bonus: also including `dateModified` is noted in detail on pass.
- **Fail criteria:** Blog content exists but either has no Article/BlogPosting schema at all (0 Article schemas found), or has the schema without date fields (`datePublished` missing from all schema instances). Report: `"X of Y blog pages have Article schema with datePublished — Z% (threshold: 80%)"` or `"0 Article/BlogPosting schemas found across Y blog pages"`.
- **Skip (N/A) when:** No blog or article content exists on the site.
- **Detail on fail:** `"0 Article/BlogPosting schemas found across 3 blog pages — AI systems cannot determine content freshness from structured data"` or `"BlogPosting schema present on 1 of 3 pages but datePublished is missing from all instances"`
- **Remediation:** Article schema with dates helps AI systems assess content freshness:

  ```tsx
  <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify({
    "@context": "https://schema.org",
    "@type": "BlogPosting",
    "headline": "Post title",
    "datePublished": "2026-04-02",
    "dateModified": "2026-04-02",
    "author": { "@type": "Person", "name": "Author Name" }
  })}} />
  ```

  For comprehensive structured data coverage, the Advanced SEO audit covers schema validation in depth.

## External references

- schema-org BlogPosting
- schema-org Article
- external bing-grounding-index — https://blogs.bing.com/search/May-2026/Evolving-role-of-the-index-From-ranking-pages-to-supporting-answers

Taxons: findability

HTML version: https://auditbuffet.com/patterns/ab-001539
