About this plugin
Every site ends up with content it forgot about. A post that used to rank well, a landing page nobody has opened since the day it went live, a “definitive guide” that quietly stopped being accurate the moment the thing it described changed. None of that shows up in your Posts list. WordPress shows you a date next to each title, but it doesn’t tell you whether that date should actually worry you. Namdar Content Decay Checker looks at every published post and page on your site and works out how likely each one is to be stale. It checks how long it’s been since you last touched it, how thin the writing is, whether it has a featured image, and how connected it is to the rest of your site through internal links. All of that becomes a single score from 0 to 100, and you get a dashboard that sorts your whole site by how much attention it needs, instead of clicking into fifty posts one at a time to guess. This is a mechanical check, not an SEO opinion. It doesn’t read your content or judge whether it’s good; it just flags what has probably gone stale so a person can decide what to do about it. If you want actual organic traffic numbers behind the score, that’s what the separate Pro add-on is for, described further down. This plugin does its job completely on its own without it. What actually goes into the score Four things feed into a post’s score by default, and every one of them except age can be switched off in Settings: Age. Days since the post was last modified, measured against a staleness window you set (180 days out of the box). You can also set a different window per content type, since a news-style post cools off a lot faster than a reference page that’s supposed to stay accurate for years. Thin content. Anything under 300 words gets flagged, on a sliding scale rather than a hard cutoff, so a 280-word post isn’t treated the same as a 20-word stub. Missing featured image. A small nudge, mainly useful for blogs where every post is expected to have one. Few internal links. Posts with almost no links out to the rest of the site tend to be the same posts nobody links back to either. Turn off whichever of these doesn’t apply to your site (documentation pages that never get a featured image, for instance) and the score adjusts on its own without you needing to touch any weights. Reviewing content without editing it Here’s the awkward part of any “last modified” check: opening a post in the block editor and clicking Update bumps the modified date even if nothing meaningful changed. So there’s a separate “Mark reviewed” action on every row. It tells the plugin you looked at the post and it’s still fine, without touching the post itself. From that point on, the age factor counts from your review instead of the last real edit. If something should just be left alone entirely, an evergreen “About” page, a legal disclaimer, whatever doesn’t belong in a decay report, you can exclude it with one click. It drops out of the scoring and the stats until you bring it back. The dashboard Everything lives on a single admin page, built as a small single-page app so moving between tabs doesn’t reload anything: Overview – total content scanned, how much needs attention, the average score with a trend line, a breakdown by content type, which authors have the most stale content, and a chart of how old your content actually is. Content – the full list: searchable, filterable by type, author, or score band, sortable by any column, with rescan, mark reviewed, and exclude actions plus a factor breakdown per post so you can see exactly why it scored the way it did. Settings – staleness windows (global and per content type), batch size, which content types get scanned, which factors count toward the score. Developer – the hooks this plugin exposes, for anyone who wants to extend it from their own code. Pro – what the paid add-on does differently, for anyone curious. It’s one tab you have to go looking for, not a nag that follows you around wp-admin. There’s also a small dashboard widget and a badge on the admin menu showing how many posts need attention, so you can check without opening the full page. How the scanning actually happens A background job goes through your content in small batches (50 posts by default) using WP-Cron, the same scheduling system WordPress already relies on for publishing scheduled posts. It runs once a day, never touches the front end, and never adds load to a page a visitor is looking at. Newly published content gets its first scan the moment it goes live, so you’re not waiting on the next scheduled run just to see it show up. There’s also a manual “Rescan entire site” button with a small live progress indicator, for whenever you want fresh numbers right away. Who this is actually useful for If you’re running a handful of posts, you probably don’t need this yet; you already know which ones are old. It starts earning its keep once a site has enough history that no one person can reasonably keep track of it in their head: agency sites managing content across several clients, blogs with a few hundred posts and some staff turnover, documentation sites where “is this still accurate” is a real and recurring question rather than a one-time cleanup. Built the way a WordPress admin screen should be No jQuery, no full-page reloads between tabs, everything on top of the REST API and core UI packages your site already ships with. Light and dark modes both fully themed, not just an inverted stylesheet. Keyboard and screen-reader support on the tabs, filters, and sortable columns. Translation-ready strings throughout. Namdar Content Decay Checker Pro A companion Pro add-on is planned for further down the line, adding Google Search Console traffic data, AI-assisted rewrite suggestions for stale titles and paragraphs, a weekly email digest, bulk actions, and CSV export. This free plugin is fully functional without it and always will be; Pro adds to it rather than unlocking anything that’s artificially held back. A preview and feature comparison live only on this plugin’s own Pro tab, never as a notice anywhere else in wp-admin, and there’s nothing to buy yet. For developers This plugin exposes stable extension points so other code can add its own decay factors or extra data without needing to modify anything here. The same list, with live examples, is also shown on the Developer tab inside the plugin: namdcode_decay_score_factors — filter the normalized factors (0-100 each) that make up a post’s decay score namdcode_decay_score_weights — filter how much each factor counts toward the final score namdcode_rest_post_data — filter the data returned for each post from the REST API namdcode_admin_table_columns — filter the column definitions returned from the columns endpoint namdcode_pro_upgrade_url — filter where the Developer tab’s “Get Pro” button points namdcode_admin_enqueue — fires after this plugin enqueues its admin assets, for enqueueing companion scripts on the same screen namdcode_is_pro_active() — helper function other plugins can call to check whether a companion plugin has registered itself