ai

Visible last-updated date

MetricSpot checks for a human-visible 'Updated on …' line near the title. AI agents weight freshness heavily — undated pages get skipped for time-sensitive queries.

What this check does

Scans the rendered page for a visible date string near the headline — patterns like “Updated on May 11, 2026”, “Last updated: 2026-05-11”, or a <time datetime="…"> element with a datetime attribute parseable to a date in the last ~24 months. The check passes when both the visible text and the underlying machine-readable date are present. Schema-only dates (in JSON-LD dateModified) are necessary but not sufficient — readers and AI agents both cross-reference visible markup against structured data.

Why it matters

Freshness is one of the strongest citation signals for AI search. When a user asks ChatGPT, Perplexity, or Google AI Overviews “what’s the latest on …”, the agent biases hard toward pages with a recent visible date. An identical page published in 2022 with no visible “updated” line gets passed over in favor of a 2025-stamped competitor — even when the 2022 page is more accurate.

The same logic applies to human readers. Nielsen Norman Group’s eye-tracking studies have shown for over a decade that users skim for a date before reading; pages without one trigger a “is this stale?” exit. For technical content (security, APIs, frameworks), an undated page is functionally untrusted.

How to fix it

Render a visible date string near the H1, wrapped in a <time> element so the date is also machine-readable. Update the displayed date whenever the content materially changes.

Vanilla HTML:

<article>
  <h1>How to enable HSTS on nginx</h1>
  <p class="meta">
    Updated on
    <time datetime="2026-05-11">May 11, 2026</time>
    by <a href="/authors/jane-doe" rel="author">Jane Doe</a>
  </p>
  <!-- article body -->
</article>

The datetime attribute must be a valid ISO 8601 string (YYYY-MM-DD is fine). The visible text can be in any human format.

Pair it with dateModified in your Article JSON-LD — both signals together is what AI agents look for:

{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "How to enable HSTS on nginx",
  "datePublished": "2024-03-02",
  "dateModified": "2026-05-11",
  "author": { "@type": "Person", "name": "Jane Doe" }
}

datePublished stays fixed; dateModified advances every meaningful edit.

Next.js (App Router):

export default async function Post({ params }) {
  const post = await getPost(params.slug);
  return (
    <article>
      <h1>{post.title}</h1>
      <p className="text-sm text-gray-500">
        Updated on{" "}
        <time dateTime={post.updatedAt}>
          {new Date(post.updatedAt).toLocaleDateString("en-US", {
            year: "numeric", month: "long", day: "numeric"
          })}
        </time>
      </p>
      {/* … */}
    </article>
  );
}

Astro:

---
const { post } = Astro.props;
const formatted = new Date(post.data.updatedDate).toLocaleDateString("en-US", {
  year: "numeric", month: "long", day: "numeric"
});
---
<p class="meta">Updated on <time datetime={post.data.updatedDate}>{formatted}</time></p>

WordPress: the default theme prints the_date(), but most themes display published date only. Switch to the_modified_date() and the_modified_time('c') for the datetime attribute:

<time datetime="<?php the_modified_time('c'); ?>">
  Updated on <?php the_modified_date('F j, Y'); ?>
</time>

Yoast and Rank Math also let you toggle “show last modified date” in their schema settings — turn it on so dateModified is emitted automatically.

Don’t fake it. Auto-bumping the date on every cron run without actually editing the content is a known anti-pattern; Google’s helpful-content system flags sites where the visible date and the body’s actual freshness diverge, and human reviewers spot it instantly. Update the date when you update the content.

See also: content depth, author byline.

Frequently asked questions

Should I show “Published on” or “Updated on”?

Both, when they differ. The typical pattern is “Published Mar 2, 2024 · Updated May 11, 2026”. Showing only “Published” buries the freshness signal; showing only “Updated” loses the longevity signal (a 2018-published, 2026-updated article carries authority a brand-new one doesn’t).

How recent does the date need to be to count as “fresh”?

For evergreen content, anything in the last 12–18 months reads as fresh. For news and fast-moving topics (AI, security, browser APIs), the window shrinks to weeks. The check passes on any parseable date, but AI agents apply topic-specific freshness curves on top.

The check looks within the main content area near the H1. A date buried in the footer or article metadata pane is invisible to most readers and to AI agent extraction. Put the date in the byline area, immediately under the headline — that’s where Nielsen Norman scan patterns and Google’s structured-data documentation both point.

Sources

Last updated 2026-05-11