Reference guide · technical-seo · Published 2026-08-16 · 3 min read
Sitemap change frequency values explained
Sitemap changefreq: values, how Google treats them, lastmod best practice, and how to wire it in your sitemap generator.
- ·The changefreq values
- ·What Google uses
- ·Wire it correctly
The changefreq values
The <changefreq> element in the sitemap protocol expresses how often you expect a page to change:
| Value | Meaning |
|---|---|
always | Changes every time you visit (do not use for a normal page) |
hourly | Roughly hourly (news tickers, live scores) |
daily | Around once a day |
weekly | Roughly weekly |
monthly | Roughly monthly |
yearly | Yearly or slower |
never | A static page that does not change |
The protocol (sitemaps.org) describes them as hints, and the word "expectation" is key. A never on a page that never changes is fine; an always on your homepage is noise that tells an engine nothing useful.
What Google actually uses
For a long time Google's documentation explicitly said changefreq is ignored. Today the guidance has softened to: Google uses the value as a hint but does not rely on it, and the element is not a ranking signal. What Google actually reads in your sitemap for crawl scheduling is <lastmod> (the last modification date) and your other signals like crawl budget.
The practical pile:
changefreq: a hint, most useful as a human-readable documentation of how often content changes.lastmod: the signal most consistently correlated with recrawl.priority(0.0-1.0): ignored by Google; it is a hint for rules-based crawlers, not a ranking lever.
lastmod done right
When you emit lastmod, make it accurate:
- Use the date the content actually changed (a commit date, the post publish/update date), not the build date of the sitemap. A sitemap that stamps every page with today's date tells the crawler nothing honest.
- Keep it timezone-consistent and ISO 8601 (
2026-08-15T10:00:00Z). - Remove stale
lastmodon pages that did not change; a generator that cannot distinguish edited from untouched content should emit nolastmodon the unchanged ones.
Wire it into the generator
The same logic that produces the page also produces the metadata. A typical generator:
const urlset = pages.map((p) => ({
loc: p.url,
lastmod: p.lastEdited || p.published, // real dates only
changefreq: p.type === 'article' ? 'monthly' : 'yearly',
}));
Emit changefreq per content type: blog posts weekly (or with your actual cadence), evergreen guides yearly, product pages when the price changes. The sitemap stays a live map of what changed, which is the reason a sitemap exists, not a static file that lingers.
When not to change it
Keep the changefreq stable once set. A page whose cadence actually changed (an article that turned into an always-updated guide) justifies an edit to weekly. A sitemap that changes values every release poisons the clue; the engines re-walk the metadata.
In short
changefreq is a hint that expresses how often a page changes, lastmod is the value that informs recrawl, and priority is mostly ignored. Wire the generator to real dates, keep the cadence honest, and the sitemap does its job: telling a crawler there is fresh content at a known URL.