October 6, 2026 · 6 min read
Refresh Old Blog Posts With AI Without Breaking What Ranks
By Anna, co-founder, build and content
You can refresh old blog posts with AI safely if the machine is only allowed to change the parts that went stale. Keep the URL, the title promise and the sections that earn clicks. Replace dead numbers, add what changed, and move the date only when the edit is real.
Most refresh disasters come from the opposite instinct: hand the whole post to a model and say “make it better.” The result reads fresh and ranks worse, because the thing that ranked was never named, so nothing protected it.
Below is the sequence we would run: what to lock, what to let the AI touch, how to check the diff, and when to leave a post alone.
Should you refresh old posts at all?
Yes, for posts that earn traffic and carry facts that expire. Refreshing is common practice: Orbit Media’s 2026 survey of 1,042 content marketers describes updating older articles as a habit that peaked at 73% of bloggers in the 2020 to 2022 era. A refresh is cheaper than a new post when the URL already has history.
It is a poor use of effort for posts with no traffic and no links. Those need a rewrite or a redirect, not a polish.
The decision is a triage, not a mood. Pick candidates by two signals: the post still gets impressions, and a specific claim in it has gone out of date. If only the first is true, leave it alone. If only the second is true, you probably have a retire-or-rewrite case.
What should an AI refresh never change?
An AI refresh should never change the URL, the main heading promise, the first-paragraph answer’s meaning, or any section that currently earns clicks or citations. These are the parts the page ranks on. Lock them as read-only inputs, and let the model touch only the facts and sentences you flag as stale.
In practice the lock list is short:
- The slug. A new URL throws away the history you are trying to protect.
- The target query and the title’s promise to the reader.
- The H2 structure, unless a section is wrong.
- Internal links that other pages point at.
- Quotes and statistics that are still current and still sourced.
Everything else is fair game. The point is to turn “improve this post” into a bounded edit with a short list of allowed changes.
What should the AI actually update?
The AI should update expired facts, replace statistics older than your cutoff, add developments since the original date, and tighten sentences that no longer match the page’s own claim. Each change should carry a source and a date. A refresh that adds an unsourced figure has made the post worse than leaving it stale.
Google’s own guidance for sitemaps draws the same line. Its documentation says the last-modified value should reflect the last significant update, and gives the main content, structured data or links as examples of significant. A changed copyright year is not.
A workable allowed-edits list:
| Edit type | Allow the AI? | Condition |
|---|---|---|
| Replace an outdated statistic | Yes | New figure has a named publisher and a year |
| Add a section on a recent change | Yes | Source cited, links to current docs |
| Rewrite the opening answer | Only if wrong | The original promise still holds |
| Change headings | Rarely | Only if the section is factually wrong |
| Change the URL or slug | No | Never |
| Pad word count | No | Length is not an update |
How do you check an AI refresh before it goes live?
Compare the new version to the old one as a diff, and test the diff against rules. Check that the locked parts are byte-identical, that every new number has a source and a year, that no banned phrasing crept in, and that link counts stayed within limits. If any rule fails, the refresh does not ship.
The diff matters more than the new text. Read the new text alone and it will look fine, because a model writes fluent prose by default. Read the diff and you see the problem: a changed heading, a deleted paragraph that carried a quote, a statistic swapped for a vaguer one.
This is the same idea as the checks we describe in how AI content quality checks work, applied to an edit instead of a draft. The rules are written down before the model runs, and a script applies them. Nobody is relied on to notice.
Our pipeline is fully automatic for this reason. The gates decide whether a change ships. No one approves individual posts, and the system is built so that does not need to be the safety net.
When does the date change?
Change the visible date and the machine-readable modified date only when the page changed substantially. Google’s helpful-content guidance lists changing the date of pages to make them seem fresh, when the content has not substantially changed, as a question to ask yourself about search-first content. Cosmetic edits do not earn a new date.
Google’s guidance on publication dates adds two practical rules. Keep the visible date and the structured data date consistent with each other. And update the modification date for significant changes, not minor corrections.
A simple rule works: if the diff touches a fact, a statistic, a step or a recommendation, the date moves and the page says what changed. If the diff fixes a typo, the date stays.
What is the risk of refreshing at scale?
The risk is that a fast refresh loop becomes the thing Google’s spam policies warn about. Google says that using automation, including AI generation, to produce content with the primary purpose of manipulating search rankings is a violation. The defence is purpose and substance: every edit exists because a fact changed, and the page says so.
Volume is not the problem. Rewriting 200 posts because a tool can is the problem. Rewriting 12 posts because 12 statistics expired is the same job done 12 times.
That is also why the candidate list should come from evidence, not a schedule. Quarterly “refresh everything” sweeps produce edits with no reason behind them, and edits with no reason are exactly what the date rule forbids rewarding.
What does a sane refresh loop look like end to end?
A sane loop is five steps: pick candidates from traffic and staleness, lock the ranking elements, let the model propose edits to the parts left open only, run the diff through the rule checks, and publish with an honest modified date. Then watch the page for a few weeks before touching it again.
- Select. A post qualifies when it still earns impressions and holds a specific expired claim.
- Lock. Slug, title promise, key headings and live links are frozen.
- Propose. The model edits only flagged sentences and sections, with sources attached.
- Check. Scripts verify the locks, the sources, the links and the banned patterns.
- Publish and wait. The date moves only if the diff earned it. Do not stack a second refresh on top of the first.
The last step is the one people skip. A page that moved after a refresh needs time before you can tell whether the edit helped or hurt, and a second change makes the first unreadable.
The brief matters here too. A refresh works from a spec the same way a new post does, and automating the content brief covers how that contract gets written once and reused.
How we install this
We build this as part of our Content Engine: the same pipeline shape we run for our own blog, with a refresh lane added for posts that already have history. How the original pipeline performs is on our inbound machine proof page.
If you have a library of old posts and want a refresh lane that cannot touch what ranks, Start async. You get a written reply within one business day, and there is no call to book.