{"id":358747,"date":"2026-09-23T05:42:48","date_gmt":"2026-09-23T05:42:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/post-decay-detector\/"},"modified":"2026-09-23T05:42:20","modified_gmt":"2026-09-23T05:42:20","slug":"decaywatcher","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/decaywatcher\/","author":13845149,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.0","stable_tag":"0.1.0","tested":"7.1.2","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"Decaywatcher","header_author":"Gauri Kaushik","header_description":"Detects decaying WordPress content by tracking traffic snapshots, scoring posts, and suggesting actionable fixes before rankings drop.","assets_banners_color":"","last_updated":"2026-09-23 05:42:20","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/GauriDevWork\/content-decay-detector","header_author_uri":"https:\/\/profiles.wordpress.org\/gauri87\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":37,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.0":{"tag":"0.1.0","author":"gauri87","date":"2026-09-23 05:42:20","revision":3708557}},"upgrade_notice":{"0.1.0":"<p>Initial release. No upgrade steps required.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Admin report table showing decay scores and suggestions for each post.","2":"Dashboard widget displaying the top 5 most decayed posts.","3":"Gutenberg sidebar panel showing decay score while editing a post.","4":"Settings page with threshold, frequency, and email notification options."}},"plugin_section":[262246],"plugin_tags":[529,282205,11223,732,186],"plugin_category":[52,55],"plugin_contributors":[252895],"plugin_business_model":[],"class_list":["post-358747","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-content","plugin_tags-decay","plugin_tags-freshness","plugin_tags-maintenance","plugin_tags-seo","plugin_category-performance","plugin_category-seo-and-marketing","plugin_contributors-gauri87","plugin_committers-gauri87"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/decaywatcher.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>WordPress site owners publish blog posts and pages, then forget about them. Over time, content becomes outdated \u2014 old statistics, missing internal links, thin word counts, and low engagement signal that a post is losing value.<\/p>\n\n<p>Decaywatcher runs a weekly background scan across all published posts and assigns each one a content health score (0\u2013100) based on real WordPress data:<\/p>\n\n<ul>\n<li><strong>Post age<\/strong> \u2014 how recently the post was updated<\/li>\n<li><strong>Word count<\/strong> \u2014 whether the content is substantial enough<\/li>\n<li><strong>Comment count<\/strong> \u2014 whether readers are engaging with the post<\/li>\n<\/ul>\n\n<p>Posts that fall below your configured threshold are flagged in an admin report with rule-based suggestions for improvement \u2014 before rankings drop.<\/p>\n\n<p>The source code, including uncompiled assets and build tools, is publicly available at:\nhttps:\/\/github.com\/GauriDevWork\/content-decay-detector<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Automatic weekly scanning<\/strong> via WP Cron \u2014 processes posts in batches to avoid timeouts<\/li>\n<li><strong>Content health scoring (0\u2013100)<\/strong> \u2014 based on post age, word count, and comment count<\/li>\n<li><strong>Rule-based suggestions<\/strong> \u2014 refresh title, add internal links, update statistics, expand content<\/li>\n<li><strong>Admin report table<\/strong> \u2014 sortable by score with score range filter<\/li>\n<li><strong>Dashboard widget<\/strong> \u2014 top 5 most decayed posts at a glance<\/li>\n<li><strong>Weekly email digest<\/strong> \u2014 sends flagged posts to admin email automatically<\/li>\n<li><strong>REST API endpoint<\/strong> \u2014 GET \/wp-json\/content-decay\/v1\/reports for external integrations<\/li>\n<li><strong>Gutenberg sidebar panel<\/strong> \u2014 shows decay score inside the block editor for the post being edited<\/li>\n<li><strong>Bulk actions<\/strong> \u2014 mark posts as reviewed or exclude from scanning<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install directly through the WordPress plugins screen.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen in WordPress Admin.<\/li>\n<li>The <code>wp_decay_snapshots<\/code> database table is created automatically on activation.<\/li>\n<li>Navigate to <strong>Settings \u2192 Decaywatcher<\/strong> to configure the decay threshold and email notifications.<\/li>\n<li>Navigate to <strong>Tools \u2192 Decay Report<\/strong> to view flagged posts.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20is%20the%20content%20health%20score%20calculated%3F\"><h3>How is the content health score calculated?<\/h3><\/dt>\n<dd><p>The score (0\u2013100) is calculated from three real WordPress data points: how recently the post was updated (up to 50 points), the post word count (up to 30 points), and the number of comments (up to 20 points). No external API or third-party service is required.<\/p><\/dd>\n<dt id=\"will%20this%20plugin%20slow%20down%20my%20site%3F\"><h3>Will this plugin slow down my site?<\/h3><\/dt>\n<dd><p>No. The scan runs via WP Cron in the background on a weekly schedule. It processes posts in batches of 50 to avoid memory and timeout issues. Nothing runs on the front end.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20if%20i%20uninstall%20the%20plugin%3F\"><h3>What happens to my data if I uninstall the plugin?<\/h3><\/dt>\n<dd><p>All plugin data is removed on uninstall \u2014 the database table, all options, and the scheduled cron event are deleted automatically.<\/p><\/dd>\n<dt id=\"what%20does%20the%20decay%20score%20mean%3F\"><h3>What does the decay score mean?<\/h3><\/dt>\n<dd><p>A score of 100 means the post is healthy \u2014 recently updated, substantial content, good engagement. A score below your configured threshold (default 30) means the post needs attention.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20multisite%3F\"><h3>Does this work with Multisite?<\/h3><\/dt>\n<dd><p>Multisite support is planned for a future release. The current version works on single-site installations only.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Weekly WP Cron decay scan with batched post processing.<\/li>\n<li>Content health scoring based on post age, word count, and comment count.<\/li>\n<li>Rule-based suggestion engine with 5 checks.<\/li>\n<li>Admin report page with sortable columns, score filter, and bulk actions.<\/li>\n<li>Dashboard widget showing top 5 decaying posts.<\/li>\n<li>Weekly HTML email digest.<\/li>\n<li>REST API endpoint with nonce authentication.<\/li>\n<li>Gutenberg block editor sidebar panel built with React.<\/li>\n<li>PHPUnit test suite with 12 passing tests.<\/li>\n<li>Zero PHPCS violations on WordPress-Extra ruleset.<\/li>\n<\/ul>","raw_excerpt":"Decaywatcher monitors your WordPress posts for content decay by scoring each post based on age, word count, and engagement \u2014 then surfaces actionable  &hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/358747","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=358747"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/gauri87"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=358747"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=358747"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=358747"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=358747"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=358747"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=358747"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}