Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when auditing content pages for freshness signals, setting up HTTP Last-Modified headers in a web server config, or ensuring Article JSON-LD dateModified is updated when CMS content changes.
.claude/skills/thedaviddias-freshness/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | -50% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 25% | 0% |
| case-17 | ✓→✗ | ▼ Worse | -18% | 0% |
| case-01 | ✓→✓ | = Same ✓ | -7% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 30% | 0% |
Google's Query Deserves Freshness (QDF) algorithm boosts recent or recently updated content for time-sensitive queries. Missing or stale freshness signals mean your updated content competes without the freshness advantage it deserves.
Last-Modified HTTP response header and include dateModified in Article JSON-LD on all content pagesdateModified only when content substantively changes — trivial edits should not alter the dateFor 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?
Last-Modified headers based on the file modification time:add_header Last-Modified $date_gmt;mod_headers is enabled; static files serve Last-Modified automatically.dateModified:json { "@type": "Article", "dateModified": "2024-11-20T14:30:00Z" }
dateModified only when content is substantively changed (not on metadata-only saves).updatedAt field through to the JSON-LD and <time> elements.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.
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.
For full implementation details, code examples, and framework-specific guidance, see references/rule.md.
Rule page: https://frontendchecklist.io/en/rules/seo/freshness
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | pass→pass | 13,266 | 9,027 | -32% | 1 | 1 | 0% | 2,394 | 2,236 | -7% | 0 | 0 | — |
case-02 | pass→pass | 7,609 | 6,859 | -10% | 1 | 1 | 0% | 1,657 | 2,157 | +30% | 0 | 0 | — |
case-03 | pass→pass | 7,704 | 9,383 | +22% | 1 | 1 | 0% | 1,797 | 2,761 | +54% | 0 | 0 | — |
case-04 | pass→pass | 9,696 | 3,752 | -61% | 1 | 1 | 0% | 1,700 | 1,366 | -20% | 0 | 0 | — |
case-05 | pass→pass | 12,939 | 10,420 | -19% | 1 | 1 | 0% | 2,188 | 2,537 | +16% | 0 | 0 | — |
case-06 | pass→pass | 7,435 | 5,289 | -29% | 1 | 1 | 0% | 1,530 | 1,701 | +11% | 0 | 0 | — |
case-07 | fail→fail | 13,508 | 9,571 | -29% | 1 | 1 | 0% | 2,758 | 2,491 | -10% | 0 | 0 | — |
case-08 | fail→pass | 11,871 | 2,837 | -76% | 1 | 1 | 0% | 2,273 | 1,132 | -50% | 0 | 0 | — |
case-09 | pass→pass | 8,226 | 7,254 | -12% | 1 | 1 | 0% | 1,821 | 2,372 | +30% | 0 | 0 | — |
case-10 | pass→pass | 12,401 | 8,013 | -35% | 1 | 1 | 0% | 2,715 | 2,232 | -18% | 0 | 0 | — |
case-11 | pass→pass | 13,342 | 10,560 | -21% | 1 | 1 | 0% | 3,129 | 3,082 | -2% | 0 | 0 | — |
case-12 | pass→pass | 7,906 | 4,574 | -42% | 1 | 1 | 0% | 1,665 | 1,575 | -5% | 0 | 0 | — |
case-13 | pass→pass | 3,400 | 2,472 | -27% | 1 | 1 | 0% | 701 | 1,057 | +51% | 0 | 0 | — |
case-14 | pass→pass | 9,062 | 4,647 | -49% | 1 | 1 | 0% | 1,525 | 1,486 | -3% | 0 | 0 | — |
case-15 | fail→pass | 13,139 | 10,300 | -22% | 1 | 1 | 0% | 2,220 | 2,764 | +25% | 0 | 0 | — |
case-16 | pass→pass | 8,858 | 2,876 | -68% | 1 | 1 | 0% | 1,699 | 1,196 | -30% | 0 | 0 | — |
case-17 | pass→fail | 6,283 | 1,849 | -71% | 1 | 1 | 0% | 1,178 | 966 | -18% | 0 | 0 | — |
case-18 | pass→pass | 2,854 | 2,557 | -10% | 1 | 1 | 0% | 571 | 1,016 | +78% | 0 | 0 | — |
case-19 | pass→pass | 9,673 | 4,842 | -50% | 1 | 1 | 0% | 1,903 | 1,526 | -20% | 0 | 0 | — |
case-20 | pass→pass | 7,735 | 1,984 | -74% | 1 | 1 | 0% | 1,347 | 974 | -28% | 0 | 0 | — |
case-21 | pass→pass | 5,417 | 2,580 | -52% | 1 | 1 | 0% | 981 | 1,104 | +13% | 0 | 0 | — |
case-22 | pass→pass | 6,299 | 3,144 | -50% | 1 | 1 | 0% | 1,109 | 1,231 | +11% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +5 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.