Show content freshness signals
Checks for last-modified and published date signals that help Google assess content currency
- Set the `Last-Modified` HTTP response header and include `dateModified` in Article JSON-LD on all content pages
- Update `dateModified` only when content substantively changes — trivial edits should not alter the date
- For time-sensitive topics (news, tutorials, product reviews), freshness directly influences Google's ranking of your content
Rule Details
Content freshness is a ranking factor for time-sensitive queries. Google's ranking systems guide (opens in new tab) and the visible date patterns in content-date markup work best together, ensuring Google can recognize a real update instead of inferring one.
Code Examples
❌ Avoid — no freshness signals
<!-- No JSON-LD dateModified, no visible date, no Last-Modified header -->
<article>
<h1>React Hooks Best Practices</h1>
<p>Updated this year with new examples...</p>
</article>✅ Correct — full freshness stack
<!-- In <head> -->
<meta property="article:published_time" content="2022-06-01T09:00:00Z">
<meta property="article:modified_time" content="2024-11-15T14:00:00Z">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"datePublished": "2022-06-01T09:00:00Z",
"dateModified": "2024-11-15T14:00:00Z"
}
</script>
<!-- In article body -->
<article>
<p class="byline">
Published <time datetime="2022-06-01">June 1, 2022</time>
· Last updated <time datetime="2024-11-15">November 15, 2024</time>
</p>
<h1>React Hooks Best Practices</h1>
</article>✅ Nginx Last-Modified header configuration
location ~* \.(html|htm)$ {
add_header Last-Modified $date_gmt;
add_header Cache-Control "public, must-revalidate";
}✅ Next.js — updating dateModified in frontmatter
// In your MDX/content file frontmatter
---
title: "React Hooks Best Practices"
publishedAt: "2022-06-01"
updatedAt: "2024-11-15" // Update this when content substantially changes
---
// In page component — generate Article JSON-LD
const articleSchema = {
'@type': 'Article',
datePublished: frontmatter.publishedAt,
dateModified: frontmatter.updatedAt,
}Why It Matters
- QDF boost: Google elevates fresh content for queries where recency matters (news, product releases, tutorials, regulations).
- Accurate dating: Without machine-readable dates, Google guesses from HTML text — often displaying wrong dates in search snippets.
- Competitive edge: For evergreen content you periodically update, surfacing the
dateModifiedmeans Google sees your updated version as more authoritative than stale competitors, particularly when the page also shows published and updated dates clearly to users.
Freshness Signal Hierarchy
Google reads freshness signals in this approximate order:
dateModifiedin Article/BlogPosting JSON-LDLast-ModifiedHTTP response headerarticle:modified_timeOpen Graph tag- Visible date text parsed from the page body (least reliable)
Best Practices
- Update
dateModifiedonly when content substantively changes — adding a new section, updating statistics, fixing inaccuracies. - Do not update
dateModifiedon every deploy or for minor formatting changes — Google may penalise artificially refreshed dates. - Ensure all three signals (JSON-LD, HTTP header, visible date) are consistent with each other.
Exceptions
- Necessary utility or compliance pages can be intentionally brief and should not be judged by the same editorial-depth expectations as ranking-focused content.
- AI-assisted drafting is not a failure by itself; flag unsupported claims, missing editorial review, or low-originality output instead.
- When a page has both trust-signal issues and crawl/index problems, make the page eligible to rank first and then improve the content quality signals.
Standards
- Use these references as the standard for the final search-facing HTML, metadata, and crawl behavior.
- Check the implementation against Google Search Central: Ranking systems guide before treating the rule as satisfied.
- Check the implementation against Schema.org: dateModified before treating the rule as satisfied.
Verification
Automated Checks
- Inspect rendered HTML and HTTP headers to confirm the expected metadata or crawlability signal is present.
- Test the affected URL with Google Search Console or equivalent tooling where relevant.
- Re-crawl a representative page set after deployment.
Manual Checks
- Confirm the change does not create conflicting canonical-url, robots, or structured-data signals.
Use with AI
Copy these prompts to use with your AI assistant, or install the MCP server to use directly from Claude, Cursor, or Windsurf.
Check
Verify implementation
For each article or blog page: (1) Check the HTTP response `Last-Modified` header — is it set and recent? (2) Check the JSON-LD for a `dateModified` property in ISO 8601 format. (3) Is a visible 'Last updated' date shown to users? (4) Is the `dateModified` in JSON-LD consistent with the visible date and the `Last-Modified` header?
Fix
Auto-fix issues
1. Configure your web server to send `Last-Modified` headers based on the file modification time: - Nginx: `add_header Last-Modified $date_gmt;` - Apache: ensure `mod_headers` is enabled; static files serve Last-Modified automatically. 2. Update Article JSON-LD to include `dateModified`: ```json { "@type": "Article", "dateModified": "2024-11-20T14:30:00Z" } ``` 3. Add a visible "Last updated" date to the article template. 4. Hook your CMS to update `dateModified` only when content is substantively changed (not on metadata-only saves). 5. If using a static site generator (Next.js, Astro), pass the frontmatter `updatedAt` field through to the JSON-LD and `<time>` elements.
Explain
Learn more
Google's freshness algorithm (QDF — Query Deserves Freshness) actively boosts recently published or updated content for searches where recency matters. If your `dateModified` is stale or absent, Google may not credit your content with the freshness it deserves, ranking older competitors above you even after you have updated the article.
Review
Code review
Check that the `Last-Modified` response header is present on article pages. Verify Article JSON-LD includes `dateModified` in ISO 8601 format. Confirm that the build or deployment system updates `dateModified` only for content files that actually changed — not a blanket timestamp update on all pages during deploy.
