Linux 软件免费装
Banner图

Unstale - Refresh Old Posts with AI, Fact-Check & Republish

开发者 webandseofr
更新时间 2026年10月7日 14:49
PHP版本: 8.1 及以上
WordPress版本: 7.1
版权: GPLv2 or later
版权网址: 版权信息

标签

republish content-refresh evergreen-content old-posts fact-check

下载

1.33.0 1.21.0 1.33.1 1.4.2 1.34.0 1.35.0 1.18.0 1.31.0 1.32.2 1.35.1 1.35.2 1.0.4 1.36.0 1.37.0 1.14.1 1.24.3 1.1.3 1.7.0 1.20.0 1.20.2 1.19.0 1.25.0 1.26.0 1.28.0 1.0.0 1.3.1 1.0.3 1.0.6 1.5.0 1.1.1 1.3.2 1.4.0 1.8.1 1.8.2 1.8.3 1.9.0 1.9.1 1.0.2 1.10.0 1.4.1 1.11.0 1.13.0 1.0.5 1.14.0 1.14.2 1.0.1 1.0.7 1.14.4 1.16.0 1.17.1 1.1.0 1.22.0 1.22.2 1.8.0 1.23.0 1.1.2 1.15.0 1.17.0 1.22.1 1.24.0 1.24.1 1.28.1 1.28.2 1.29.0 1.14.3 1.2.0 1.29.1 1.5.1 1.27.0 1.3.0 1.20.1 1.29.3 1.29.4 1.24.2 1.29.2 1.30.0 1.30.1 1.30.2 1.32.0 1.32.1 1.12.0 1.32.3 1.6.0 1.32.4 1.32.5 1.32.6

详情介绍:

https://www.youtube.com/watch?v=3lzhQssZ9RY Your best posts stopped bringing traffic. Not from a penalty: the prices, the statistics and the year references inside them grew outdated while fresher pages took the rankings. A content refresh fixes that, and Unstale runs one with real AI, through the AI provider you already connected to WordPress. Point it at a published post. It reads the post, searches the live web, fact-checks its most important claims against what it finds, rewrites the text, updates the SEO metas from the Balanced level up, adds internal links, and hands you the result as a diff to approve. Then it republishes with a fresh date, without breaking your URLs. What one content refresh actually does Find out what has gone stale, for free Knowing a refresh works is one thing. Knowing which of your 400 posts needs one is another. The Content health screen lists your published content that has not been updated in a while, oldest first, split into three age ranges so you can see how much of your archive has drifted. It reads nothing but your own database, so looking costs you nothing and needs no AI provider connected. When you are ready, select what you want from that screen and send it off in one batch. Unstale shows an estimated cost before anything starts, and names anything it left out of the batch along with the reason. Find out what competes with itself, for free Two posts that cover the same ground do not rank together, they rank against each other, and the newer or thinner one usually loses. The same Content health screen scans your published content and groups the posts that overlap too closely, so you see the competition before Google decides it for you. The scan compares your own text with itself, on your own server: no AI provider needed, nothing sent anywhere, and it costs nothing to run. Each group names the post Unstale would keep, and why. With an AI provider connected, an optional AI pass reads every group in context and tells two posts that merely share vocabulary from two posts that genuinely chase the same query. You keep the keys, and you keep the bill Since WordPress 7.0, providers and credentials live in Settings > Connectors and are managed by WordPress itself. Unstale uses whatever you set up there, so this plugin stores no API key of its own and never sees your credentials. Your WordPress talks to that provider directly. Your content, published or draft, never passes through our servers. We do not see it. You pay your provider directly, at its own rates, and nothing to us per refresh. No credits, no monthly quota, no cap on how many old posts you refresh. Unstale shows an estimated cost before a refresh you confirm from the editor, the posts list or Content health, and logs the real one after. Nothing goes live without you Every refresh waits in a review queue with a side-by-side diff of the current post and the proposed one. You approve it or you discard it. Automatic publishing, which skips this step, is off by default and switched on in the settings. Before it publishes, Unstale saves the current post as a WordPress revision when revisions are enabled on your site. WordPress does not version Elementor or SeedProd layouts, so for those the job keeps its own copy instead. The Restore the previous version link under the editor puts the post back from either one, after a screen that names what it restores. An AI agent connected to your site prepares refreshes the same way, and cannot approve one unless you allow it in the settings. Republishing that does not break your URLs Republishing plugins usually warn you not to use them when your permalinks contain the post date, because bumping the date moves the URL. Unstale skips the bump automatically when the new date would change the post's address, whichever date tags your permalinks use, and when a refresh changed nothing in the text. To keep dated URLs and still refresh the date, switch to the %unstale_year%, %unstale_monthnum% and %unstale_day% tags: they freeze the original date in the URL for good. Republication also carries position control, randomized timing, allowed days and time windows. Works with what you already run Unstale fits the stack you have instead of asking you to change it, and none of this needs a setting: it detects what is active and adapts. What Unstale does not do It does not write new articles. It works only on posts you already published, which is the point: the traffic is easier to win back on an evergreen post that once ranked than on a new one nobody has read. It does not read Search Console and does not rank your archive by traffic lost, so you choose which old posts to refresh, one by one or in batches from the Content health screen. And there is no account to create anywhere. Two refresh levels are free: Minimal and Balanced, and so is sending a batch off from the Content health screen. The Strong and Maximal levels, scheduled automation and per-category rules are part of Unstale Pro. Automation of the free levels is available through the REST API (unstale/v1), WP-CLI (wp unstale refresh) and WordPress abilities that AI agents reach through the MCP adapter. Unstale is developed by Web & SEO Ltd, the company that owns and operates unstale.ai.

安装:

  1. Install and activate the plugin. WordPress 7.0 or newer is required.
  2. Go to Settings > Connectors and connect an AI provider if you have not already. Unstale will tell you if none is connected.
  3. Open Unstale > Get started and follow the checklist: connect a provider, pick a model it serves, refresh one post, then read the diff.
  4. In the Posts list, click "Refresh with Unstale" on any published post. Review the estimated cost, confirm, then approve the proposed rewrite in Unstale > Review queue.
Video walkthrough: https://www.youtube.com/watch?v=7YLuWUl5jZQ First refresh, from the estimate to the approval: https://www.youtube.com/watch?v=dzC125M6iek

屏幕截图:

  • Side-by-side diff before approval
  • Review queue with per-job actions
  • Settings: connected AI provider, model cards, and what each refresh level costs per 1,000 words
  • Journal: every refresh with its token counts and real cost, exportable to CSV
  • The Unstale block under the post editor: start a refresh, then read what it changed
  • Get started: a checklist that reads your site and offers your first refresh

升级注意事项:

1.37.0 The Article structured data Unstale adds is now reserved for posts: pages no longer receive one. 1.36.0 Structured data is now an Article only, added only when your post does not already carry one, with or without an SEO plugin. 1.35.2 Redirects now work for old URLs whose slug uses non-Latin letters. 1.35.1 Fixes refreshes that Google's content filter blocked by mistake at the research step. 1.35.0 Redirects can now be added by hand, and stay correct when the post they point to is retired or unpublished. 1.34.0 A refresh that removes a link of the original post or points it elsewhere now waits for your review, even with automatic publishing on. 1.33.1 A rewrite that loses a shortcode or embed is now caught and retried at the rewrite step, before the later steps are paid. 1.33.0 Refreshes now fix weak alt text by looking at the images, add a caption where it helps, and fill an empty media library alt text. 1.32.6 A brief provider outage no longer fails a refresh, Retry stops before paying when the post changed, and enrich is no longer cut off. 1.32.5 Review screens now say what a refresh will really publish, and a few Divi and Elementor edge cases stop before spending. 1.32.4 Cost estimates follow Google's Gemini Flash rate change on January 1, 2027. 1.32.3 Activating Unstale opens the Get started screen again, instead of leaving you on the Plugins list. 1.32.2 Confirm with AI on the cannibalization screen now stops and explains why when your default model is not served, instead of failing on every group. 1.32.1 Fixes Unstale admin screens that lost their buttons and styles as soon as a refresh was waiting for review. 1.32.0 A refresh is now refused, with the reason, when your default model's AI provider is not connected, instead of quietly running on another provider's model. 1.31.0 A refresh now checks the YouTube videos in your posts and replaces a deleted or private one with a relevant video, checked before use. 1.30.2 The fact check knows today's date, so a refresh no longer swaps one outdated fact for another written from memory. 1.30.1 The publish date no longer moves when it would change the post's address, whatever date tags your permalinks use. 1.30.0 With automatic publishing on, a refresh that adds an outdated figure now waits for your review instead of going live. 1.29.4 Keeps video embeds out of the rewrite, so posts with YouTube videos no longer fail on broken embed markup. 1.29.3 Repairs the block comments a rewrite breaks most often, so long articles with many lists no longer fail after two paid attempts. 1.29.2 Refuses code samples it cannot rewrite before spending anything, and fixes the year and the publish date on SeedProd pages. 1.29.1 Fixes the layout of the model cards in Settings. 1.29.0 The publish date no longer moves when a refresh changed nothing in the text. Bulk actions on Content health now work on phones. 1.28.2 Recommended for everyone: long block posts that failed at the rewrite step since 1.28.1 now go through. Start a new refresh on those posts, not a retry. 1.28.1 Recommended for everyone: a refresh can no longer publish broken block markup, and the model no longer dates your JSON-LD. 1.28.0 Recommended on a fresh site: Get started now walks you from the provider to your first reviewed refresh, one step at a time. Pro users: update the free plugin first, then Pro 1.13.0 adds the licence step. 1.27.0 Recommended for everyone. Settings gains a Writing section, used by Unstale Pro for site-wide instructions and the quiz setting. 1.26.0 Recommended for everyone. Connecting an AI agent moves from Settings to its own Unstale > AI Agent screen. Nothing to set up again. 1.25.0 Recommended for everyone. Gemini 3.8 Flash becomes the recommended model and the default on new installs. Your site keeps the model it runs on today. 1.24.3 Recommended if you schedule refreshes in bulk: the estimate no longer says already scheduled page builder posts move to the new date when you leave them out. 1.24.2 Recommended if an AI agent drives Unstale: a refresh that reaches review while the agent cancels it now waits for you, as the approval setting says. 1.24.1 Recommended if you refresh in bulk: a selection with Elementor, Divi or SeedProd pages no longer fails at confirmation, and their cost shows before you include them. 1.24.0 Recommended if you use an AI agent: Claude Code, Codex or Hermes Agent can now find stale posts and start refreshes on your site through the MCP adapter, while approving them stays yours. 1.23.0 Recommended if you approve refreshes from the review queue: outdated facts and new figures no source confirms now show above the diff, where you decide. 1.22.2 Recommended if your posts embed widgets, videos, icons or forms: publishing a refresh no longer strips them, and a refresh that would lose one is refused instead. 1.22.1 Recommended if a refresh keeps failing with an answer cut off at the output limit on posts that embed widgets: their hidden block settings no longer reach the model. 1.22.0 Recommended if you refresh in batches: Content health can schedule a refresh for a date you choose, exclude a whole selection at once, and show the whole list on one page. 1.21.0 Recommended if you consolidate cannibalized content with automatic publishing on: a consolidation now waits for your review before it goes live. Update the free plugin first and Pro second. 1.20.2 Recommended if you publish refreshes automatically: Unstale no longer tells you a refresh waits for your review when it will not. 1.20.1 Recommended if you consolidate cannibalized content: a consolidation can no longer be lost, and the scan stops showing results from before an article changed. 1.20.0 Recommended if you consolidate cannibalized content: a consolidated group now stays on the scan until its absorbed articles are retired. Update the free plugin first and Pro second. 1.19.0 Recommended if you use Confirm with AI: a verdict that splits a group no longer reads as a confirmation of every article. Update the free plugin first and Pro second. 1.18.0 Adds the redirect layer Unstale Pro 1.7.0 needs to retire articles that compete with each other, plus a screen to undo those redirects. Update the free plugin first and Pro second. 1.17.1 Recommended if a date shortcode plugin writes the year in your posts: a refresh could fail at the last step and publish nothing. 1.17.0 Recommended for everyone. Content health gains a search box, the meta title and description now carry your SEO plugin's current-year variable, and a style edit made in Elementor while a refresh waits for review is no longer undone on approval. 1.16.0 Recommended for everyone, and needed if you refresh pages built with Elementor, Divi or SeedProd: the Restore the previous version link now works on them, and an Elementor page no longer shows the old text for up to a day after a refresh. 1.15.0 Recommended for everyone. A year that only dates your content now follows the calendar, in the text, the title and the metas, or becomes your current-year plugin's shortcode where it renders. A title changes by its year only. Unstale Pro 1.6.0 needs this version. 1.14.4 Recommended for everyone. A refresh step that fails twice in the same paid way no longer buys a third attempt that could only fail too. Failures that cost nothing keep all three tries, and a retry you start yourself always begins with the full budget. 1.14.3 Recommended for everyone, and needed if a long post keeps failing with an answer cut off at the output limit. Long posts are now split on what they really weigh, the room allowed for an answer is twice as large, and a refresh caught mid-rewrite by this update restarts cleanly. 1.14.2 Recommended for everyone. Confirm with AI, in Content cannibalization, no longer announces a working verdict as a failure, and stops losing about one verdict in seven to an answer cut short. The price shown before you click is unchanged. 1.14.1 Recommended for everyone. Confirm with AI, in Content cannibalization, no longer answers that every group no longer exists: any post saved anywhere on the site between the scan and the click emptied the list it read. It now recomputes, and finds each group by its posts. 1.14.0 Recommended for everyone. Confirm with AI, in Content cannibalization, gives real verdicts again: the answer was being cut short and read as a refusal. Content you excluded, and pages marked noindex, stay out of the scan. 1.13.0 Recommended for everyone. The settings screen now shows the refresh level you actually saved and no longer overwrites it. A level your plan locked, or a model that left the catalog, is named as the cause instead of being blamed on your AI provider. 1.12.0 Recommended for everyone. Content your SEO plugin marks noindex is no longer offered for refresh, and a new Excluded tab shows everything Unstale skips and why. Yoast SEO, All in One SEO, SEOPress and Rank Math are all read. 1.11.0 Recommended for everyone. You can now exclude a post from refreshes with one link, and take it back the same way. Popup and template types no longer show up as posts to refresh, nor as internal-link targets. 1.10.0 Recommended for everyone. A refresh now checks the figures it added itself, not just the ones your original article already carried, and the review screen lists the added ones no source confirms. No model is called when it added none. 1.9.1 Worth taking if you picked a model other than the default. When the catalog replaces a model with a newer one from the same family, your site now follows that upgrade instead of staying on the older name, and never moves to a different provider. 1.9.0 Recommended for everyone. A refresh no longer changes how your article addresses its reader: Unstale measures that voice first and holds the rewrite to it. The editor block also says up front whether the publish date will move. 1.8.3 Worth taking if your site is built of short pages, such as product sheets or single answers. Content health measured every pair against the length of a full page, so the shortest pages could not reach the mark even against an identical copy. Pairs are now measured against the shorter of the two. 1.8.2 Worth taking if your site is written in Chinese, Japanese, Thai, Lao, Khmer or Burmese. Content health found few competing posts on those sites, often none: it chose how to compare text by counting characters per word, which Chinese and Thai never trigger. It now looks at the writing system. 1.8.1 Worth taking if your site has large families of similar pages. A group of more than 25 posts sharing a vocabulary is a template, and Unstale never sends it to the AI. The screen still called it a group the AI could not confirm, which read as a verdict nobody asked for. It now says what it is. 1.8.0 Recommended for everyone. Content health now finds published posts that compete over the same topic and names the one to keep. It runs on your own text, costs nothing, and needs no AI provider. With one connected, an optional pass tells shared vocabulary from a real overlap. 1.7.0 Worth taking if Unstale never quite got started on your site. A new Get started screen lists your five stalest posts with one button to queue them all, and the cost still shows before anything is spent. Existing sites find it under Unstale, Get started. 1.6.0 Recommended for everyone. A refresh that finishes while you work elsewhere now tells you, and a published refresh can be undone in one click: text, publish date and SEO fields all go back. The posts list colours what has drifted and the Journal exports to CSV. 1.5.1 Only worth taking if you use Unstale Pro. The block under the editor then says which rule governs the post you are writing, and warns you when a rule excludes it from the automation. Nothing changes without the add-on. 1.5.0 Refreshing a post no longer means leaving the editor. A new Unstale block sits under the editor, starts the refresh and then reports every change it made, one line per change. 1.4.1 Small but worth taking. The bundled catalogue no longer expects a September price rise on Claude Sonnet 5 that was cancelled, and Unstale Pro's licence key can be entered from Settings rather than only from its own menu. 1.4.0 Recommended for everyone. Elementor, Divi and SeedProd pages refresh without a warning, All in One SEO sites finally receive the title and description they paid for, and the cost shown before a refresh on Google models is no longer about fifteen times too high. 1.3.2 Required if your site runs PHP 8.1: every earlier version stops on one of its own files there and the plugin cannot run at all. Nothing changes on PHP 8.2 and above. 1.3.1 A SeedProd page refreshed in the builder only now says so in the journal, instead of looking like a refresh that did nothing. 1.3.0 Adds SeedProd pages to what a refresh can handle, alongside Elementor and Divi. A page using SeedProd Pro blocks is refreshed in the builder and left untouched online until you save it there. 1.2.0 Fixes a bug that made Elementor and Divi pages impossible to refresh, and one that could publish a long article with a hole in the middle. Adds Elementor and Divi pages to what a refresh can handle.

常见问题:

How much does a refresh cost?

You pay your AI provider directly, per token. Unstale shows an estimate before a refresh you confirm from the editor, the posts list or Content health, and logs the real cost after. For a 1000-word article at the Balanced level the estimate runs from roughly $0.08 on the cheapest model in the catalogue to roughly $0.70 on the dearest, depending on the model you pick. That estimate is conservative, not a ceiling: its token counts are calibrated on real pipeline runs and it counts every web search the level allows, so the cost logged after the run usually comes in lower. On the cheapest model, measured runs land around two cents. Models whose provider grants a monthly allowance of free web searches are estimated with that allowance applied, and the confirmation screen says so. A site that refreshes enough articles in one month to exhaust the allowance will pay for the searches beyond it, which the estimate does not yet track. Web search fees are part of the estimate shown before a refresh, but not of the cost logged after it. None of the three provider plugins passes the number of searches back to WordPress today, so the plugin cannot price them once the run is over. The journal says so instead of showing a zero, and the estimate remains the honest figure for that part of the bill.

How is this different from a plugin that just changes the publish date?

A date bump moves an old post back to the top of your feeds, but the text stays exactly as outdated as it was. Unstale rewrites the content first: it researches the subject on the live web, corrects the figures and prices that aged, updates the metas and the internal links, and only then republishes. The date bump is the last step of the job, not the whole job, and it is skipped when the refresh changed nothing in the text.

Can I try it on a single post before touching my archive?

Yes, and that is the default path. The Posts list has no bulk action: you refresh one post at a time, review the diff, and approve or discard. Nothing sweeps your archive unless you ask for it, either by ticking the posts you want on the Content health screen, from WP-CLI (wp unstale refresh --all, which asks you to confirm first, because every job spends money at your provider), or through the scheduled rules in Unstale Pro.

Does my content go through your servers?

No. WordPress calls the provider you connected, directly. The only request to unstale.ai is the public model catalog (no content, no personal data).

Which API key does it use?

None of its own. Since WordPress 7.0, credentials live in Settings > Connectors and are managed by WordPress. Unstale never sees, stores or transmits them. If you used an older version of this plugin, the API keys it had stored are deleted automatically when you update.

Can it publish without my approval?

Not by default. Every refresh waits in the review queue with a side-by-side diff. Automatic publishing skips that step, and only runs if you switch it on in the settings.

Can an AI agent such as Claude Code, Codex or Hermes Agent drive Unstale?

Yes. Unstale registers WordPress abilities that list your stale content, estimate a refresh, start it, follow it and read its fact-check. With the MCP adapter plugin active (it is published on GitHub), your agent connects to a dedicated Unstale server with an application password, and the Unstale > AI Agent screen gives the configuration for each client, plus an SSH variant. The agent talks to your site directly: nothing goes through unstale.ai. It prepares refreshes but cannot approve or reject them unless you switch on "Let AI agents approve or reject refreshes" on that same screen. With Unstale Pro, a refresh can also carry a custom instruction, such as a keyword to target.

Does it rewrite my titles?

Only the year in them. From 1.15.0, a refresh at the Balanced level or above can update the post title, and the one change allowed there is a year that dates the content: "Best laptops 2025" becomes "Best laptops 2026", or the shortcode of your current-year plugin where it renders. A title that would differ from the original in any other way is refused and the original stays. The slug never changes, the proposed title is shown in the review queue before anything is published, and the revision taken before publication keeps the previous one.

My permalinks contain the post date. Will the date bump break my URLs?

No: the bump is skipped automatically for any post whose address would change with the new date, whichever date tags your permalinks use (year, month, day, hour, minute or second, or a structure of its own for a post type). To keep dated URLs AND bump dates, switch your structure to the %unstale_year%, %unstale_monthnum% and %unstale_day% tags: they freeze the original date in the URL forever. If you deactivate Unstale later, the plugin automatically restores the core date tags so your site keeps routing (posts whose date was bumped will then use the bumped date in their URL). Deleting the plugin files manually without deactivating skips that safety net: re-save your permalink structure in that case.

Does it work with my page builder, my SEO plugin and my cache plugin?

Page builders: Elementor, Divi and SeedProd. The refresh rewrites the text inside the page the builder already built, so nothing about your layout moves. Out of the box, Unstale recognises no other builder: such a page gets no warning, and the refresh rewrites its standard WordPress content, which may not be what your visitors see. A developer can register a builder with the unstale_builder_detectors filter; if Unstale has no adapter for it, it then asks you to confirm before refreshing its pages. SEO plugins: Yoast SEO, Rank Math, All in One SEO and SEOPress. The meta title and description go into their own fields, and Unstale only adds its own Article structured data to posts, when the page carries none, so you never get two Article schemas on one post. With no SEO plugin, Unstale writes the metas itself. Cache plugins: WP Rocket, W3 Total Cache, LiteSpeed Cache, WP Super Cache, WP Fastest Cache and SG Optimizer. Only the refreshed post is purged, never your whole cache. A cache or CDN outside that list plugs onto the unstale_purged action. None of it needs configuring: Unstale detects what is active on your site and adapts.

Which models are supported?

The models in Unstale's catalog, for the provider you connected. Unstale ships model cards for Gemini 3.8 Flash (default on new installs), Claude Sonnet 5.5 and GPT-6 Sol, with pricing and ratings to help you choose. A site that already ran Unstale keeps the model it had. All three are generally available, so the model you pick is the model that runs; if the catalog ever marks one as preview, Unstale runs its fallback instead and states the substitution on the model card and in the job log. The catalog is updated remotely: when a provider ships a new model, it appears in your settings without a plugin update.

更新日志:

1.37.0 1.36.0 1.35.2 1.35.1 1.35.0 1.34.0 1.33.1 1.33.0 1.32.6 1.32.5 1.32.4 1.32.3 1.32.2 1.32.1 1.32.0 1.31.0 1.30.2 1.30.1 1.30.0 1.29.4 1.29.3 1.29.2 1.29.1 1.29.0 1.28.2 1.28.1 1.28.0 1.27.0 1.26.0 1.25.0 1.24.3 1.24.2 1.24.1 1.24.0 1.23.0 1.22.2 1.22.1 1.22.0 1.21.0 1.20.2 1.20.1 1.20.0 1.19.0 1.18.0 1.17.1 1.17.0 1.16.0 1.15.0 1.14.4 1.14.3 1.14.2 1.14.1