
InfoWebPlus: Redirect Content Manager
Monitor retired URLs, audit redirect health, and automatically exclude redirected content from XML sitemaps.
Description
A professional SEO and content retirement manager that helps WordPress users monitor redirected pages, blog posts and custom post types, automatically exclude redirected content from XML sitemaps, audit redirect health and maintain a clean index. It does not create redirects - it integrates with your existing redirect and SEO plugins.
This plugin does not create redirects. It integrates with redirect plugins (Redirection, Rank Math, Yoast Premium, and others) and SEO plugins (Yoast SEO, Rank Math, SEOPress, AIOSEO).
Need help on your WordPress site? See our custom software and web design services, or browse developer resources, Insights, and Research.
Perfect for sites that
- Retire or consolidate large numbers of pages (multi-location, international, or legacy content)
- Use Redirection (or similar) for 301 rules and Yoast SEO / Rank Math for sitemaps
- Run Ahrefs (or similar) site audits and reconcile 3xx redirect reports with live WordPress data
- Want redirected URLs automatically removed from XML sitemaps without manual Yoast work per URL
Key features
- Monitored Items – central list of URLs with redirect status, HTTP code, provider, and sitemap inclusion
- Sync from redirect plugin – import active 301 rules from Redirection, Rank Math, Yoast Premium, Safe Redirect Manager, or Simple 301 Redirects
- Live sitemap exclusion – active 301 redirects are excluded from XML sitemaps at generation time
- SEO health checks – redirect chains, loops, broken redirects, missing redirects, noindex in sitemap, and more
- Import – manual URLs, CSV (including Ahrefs exports), XLSX, ZIP archives
- Dashboard – KPIs, charts, quick filters, and one-click scans
- Scheduled scans – daily/weekly/monthly via WP Cron
- Filters & bulk actions – post type, status, HTTP code, redirect provider, sitemap status
- Multisite compatible and translation ready
Supported redirect plugins
- Redirection
- Rank Math
- Yoast SEO Premium
- Safe Redirect Manager
- Simple 301 Redirects
Supported SEO plugins
- Yoast SEO
- Rank Math
- SEOPress
- All in One SEO
Privacy
No tracking, telemetry, or external API calls. All scans and imports run on your server.
Screenshots
Does this plugin create redirects?
Does it work with Ahrefs exports?
Will redirected pages disappear from my sitemap automatically?
Which redirect plugin should I use?
Does it work on large sites?
Is data sent to external servers?
Installation
Install Redirect Content Manager from WordPress.org.
Official download
Install Redirect Content Manager from the WordPress.org plugin directory.
That is the only supported public install channel. There is no public GitHub/GitLab download for end users yet.
Requirements
- WordPress 6.4 or higher (tested up to 7.0)
- PHP 8.1 or higher
- MySQL 5.7+ or MariaDB 10.3+
- ZipArchive PHP extension (required for XLSX import only)
Install from WordPress admin
1. In WordPress go to Plugins → Add New 2. Search for Redirect Content Manager 3. Click Install Now, then Activate 4. Open Redirect Manager in the admin menu
Or open the listing directly: wordpress.org/plugins/redirect-content-manager
First steps
1. Configure settings - Redirect Manager → Settings: monitored post types, redirect provider, SEO plugin 2. Import / Sync - pull rules from your redirect plugin, or import CSV / Ahrefs exports 3. Run a scan - Dashboard → Scan Everything 4. Review health issues - Health Issues page
Multisite
Supports WordPress Multisite. Activate network-wide or per-site. Each site keeps its own monitored items and settings.
Uninstall
Before uninstalling, choose whether to keep data:
- Settings → Advanced → Keep data when plugin is uninstalled
If unchecked, plugin tables and options are removed on uninstall.
Troubleshooting
| Issue | Solution |
|---|---|
| No redirects detected | Ensure a supported redirect plugin is active; check Settings → Redirect Provider |
| Sitemap exclusion not working | Verify SEO plugin is detected; check Settings → SEO Plugin |
| XLSX import fails | Enable the PHP ZipArchive extension |
| Slow scans on large sites | Increase batch size in Settings → Performance |
Developer
Architecture, namespaces, and contribution notes for Redirect Content Manager.
Namespace
All classes use the RedirectContentManager\ PSR-4 namespace, autoloaded from the classes/ directory.
Dependency Injection
Access the container via:
$container = rcm()->container();
$scan_service = $container->get( \RedirectContentManager\Services\ScanService::class );Adding a Redirect Provider
Implement RedirectProviderInterface:
use RedirectContentManager\Interfaces\RedirectProviderInterface;
use RedirectContentManager\Models\RedirectResult;class MyRedirectProvider implements RedirectProviderInterface { public function get_slug(): string { return 'my-provider'; } public function get_name(): string { return 'My Provider'; } public function is_available(): bool { return true; } public function detect( string $url ): RedirectResult { /* ... */ } public function get_all_redirects(): array { /* ... */ } } ```
Register via filter:
add_filter( 'rcm_redirect_providers', function ( array $providers ) {
$providers['my-provider'] = new MyRedirectProvider();
return $providers;
} );Adding an SEO Adapter
Implement SeoAdapterInterface and register with rcm_seo_adapters filter.
Adding a Health Check
add_filter( 'rcm_health_checks', function ( array $checks ) {
$checks['my_check'] = function () {
return array( /* HealthIssue objects */ );
};
return $checks;
} );Adding a Future Module
add_filter( 'rcm_modules', function ( array $modules ) {
$modules['gsc'] = new MyGscModule();
return $modules;
} );Modules should implement a boot() method.
Database Tables
| Table | Purpose |
|---|---|
{prefix}rcm_monitored_items | Monitored URLs and scan data |
{prefix}rcm_scan_logs | Scan history |
{prefix}rcm_health_issues | SEO health issues |
{prefix}rcm_activity_logs | Activity audit trail |
REST API Authentication
All endpoints require the manage_options capability. Use WordPress REST nonce:
fetch('/wp-json/redirect-content-manager/v1/statistics', {
headers: { 'X-WP-Nonce': wpApiSettings.nonce }
});Coding Standards
- WordPress Coding Standards (WPCS)
- PHPStan level 8
- Strict types in all files
- Prepared SQL statements only
- Nonce verification on all admin actions
Running Tests
composer test # Unit + integration
composer test:unit # Unit tests only (no WordPress DB)
composer test:integration # Integration tests only
composer phpcs
composer phpstanWordPress Test Suite (Integration Tests)
Integration tests live in tests/Integration/ and require the official WordPress test suite. Without the harness, they automatically call markTestSkipped().
Local setup
Adjust database credentials as needed:
export WP_TESTS_DIR=/tmp/wordpress-tests-lib
export WP_CORE_DIR=/tmp/wordpress/git clone --depth=1 --branch trunk github.com/WordPress/wordpress-develop.git /tmp/wordpress-develop bash /tmp/wordpress-develop/bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 latest
composer test:integration ```
Continuous Integration
GitHub Actions (.github/workflows/ci.yml) provisions MySQL 8, installs the WordPress test suite from wordpress-develop, and runs the full PHPUnit suite (unit + integration) on PHP 8.2 and 8.3.
Hooks
Actions and filters exposed by Redirect Content Manager.
Actions
`rcm_loaded`
Fires after the plugin has fully booted.
do_action( 'rcm_loaded', $plugin );Parameters: - $plugin (RedirectContentManager\Plugin) - Plugin instance
`rcm_scan_completed`
Fires after a scan completes.
do_action( 'rcm_scan_completed', $scanned, $issues, $type );Parameters: - $scanned (int) - Number of items scanned - $issues (int) - Number of health issues found - $type (string) - Scan type slug
`rcm_import_completed`
Fires after an import completes.
do_action( 'rcm_import_completed', $result, $type );Parameters: - $result (array) - Import result with imported, skipped, errors - $type (string) - Import type (csv, xlsx, manual)
`rcm_item_deleted`
Fires when a monitored item is deleted via REST API.
do_action( 'rcm_item_deleted', $id );Parameters: - $id (int) - Deleted item ID
`rcm_scheduled_scan`
Cron hook for scheduled scans. Registered by the plugin; do not call directly unless testing.
`rcm_weekly_report`
Cron hook for weekly email reports.
Filters
`rcm_redirect_providers`
Filter registered redirect detection providers.
apply_filters( 'rcm_redirect_providers', $providers );Parameters: - $providers (array<string, RedirectProviderInterface>)
`rcm_seo_adapters`
Filter registered SEO plugin adapters.
apply_filters( 'rcm_seo_adapters', $adapters );Parameters: - $adapters (array<string, SeoAdapterInterface>)
`rcm_health_checks`
Filter health check strategies.
apply_filters( 'rcm_health_checks', $checks );Parameters: - $checks (array<string, callable>) - Map of slug to callback returning HealthIssue[]
`rcm_exclude_from_sitemap`
Filter whether a post should be excluded from sitemap.
apply_filters( 'rcm_exclude_from_sitemap', false, $post );Parameters: - $exclude (bool) - Current exclusion status - $post (WP_Post) - Post object
Used by: Yoast, Rank Math, AIOSEO, and core sitemap filters
`rcm_redirect_detected`
Filter redirect detection result.
apply_filters( 'rcm_redirect_detected', $result, $url, $provider );Parameters: - $result (RedirectResult) - $url (string) - $provider (string) - Provider slug
`rcm_modules`
Register optional future modules.
apply_filters( 'rcm_modules', $modules );Parameters: - $modules (array<string, object>)
`cron_schedules`
The plugin adds rcm_monthly and rcm_custom schedules via the cron_schedules filter.
Changelog
Version 1.0.39
All notable changes to Redirect Content Manager will be documented in this file.
Developer: InfoWebPlus
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.0.39] - 2026-07-31
Changed
- Health Issues redirect-chain messages show only the initial URL; full hop list stays under View chain steps
[1.0.38] - 2026-07-30
Added
- Global progress bar and status banner on every admin page while Scan or Sync is running
- Toast popups for Scan Everything and Sync completion summaries (and errors)
- Scan/Sync progress persists across admin tabs (server-side job status; UI resumes until the job finishes)
Changed
- Monitored Items filters and table merged into one panel; Per Page and Export CSV live next to Filter/Reset
- Health Issues UI simplified: removed Issue Type chips and duplicate Issue Log header; Type filter stays in the Filters dropdown
- Dashboard overview bars with a count of 0 no longer render a colored fill segment
- No Redirect overview bar uses gray (not red), matching the Overall Health legend
- KPI, Health, Import, and related panels dim during an active scan/sync
- Plugin URI points to infowebplus.com/developers/wordpress/redirect-content-manager
[1.0.37] - 2026-07-30
- Scan progress UI refinements; superseded by 1.0.38.
[1.0.36] - 2026-07-30
- Scan progress UI; superseded by 1.0.38.
[1.0.35] - 2026-07-30
- Admin UI cleanup; superseded by 1.0.38.
[1.0.34] - 2026-07-30
Changed
- Health Issues Export CSV button moved next to Filter/Reset and uses the current Severity, Type, and Search form values
Fixed
- Redirects to the site homepage (e.g.
/home→/) are no longer flagged as critical broken redirects
[1.0.33] - 2026-07-30
Added
- Export CSV for Monitored Items (respects current list filters)
Fixed
- Monitored URLs no longer resolve to the wrong WordPress page by slug basename alone (e.g.
/countries/africa/cambodiafalsely marked as the published/countries/cambodiapage)
[1.0.32] - 2026-07-30
Added
- Export CSV for Health Issues (respects severity, type, and search filters)
- Clickable URLs in redirect chain messages and chain step details
- Clickable URLs in Recent Critical Issues messages on the Dashboard
[1.0.31] - 2026-07-24
Changed
- Sitemap exclusion no longer writes a
noindexmeta: redirected content is removed from the sitemap via the SEO plugin's official sitemap filters only, and its index state is left untouched - Renamed all internal identifiers from the
rcm_/RCM_prefix toiwp_rcm_/IWP_RCM_(options, hooks, AJAX actions, cron events, database tables, constants, cache group, script handle) to avoid collisions; existing installs are migrated automatically (tables, options and the scheduled scan are moved on upgrade) - Display name is now "InfoWebPlus: Redirect Content Manager"
- Removed
load_plugin_textdomain()call (translations load automatically on WordPress 4.6+)
Fixed
- Pages excluded from the sitemap were being set to
noindex; on upgrade, any noindex previously written by the plugin to excluded items is cleared automatically (one-time migration)
[1.0.30] - 2026-07-21
Changed
- Admin UI aligned with marketing mockups: header toolbar, KPI icons, dashboard layout, import cards, status pills
[1.0.29] - 2026-07-21
Changed
- Import methods grid redesigned: equal-height cards, dashicons, compact drop zones, footer actions
[1.0.28] - 2026-07-21
Added
- Import page redirect provider selector with installed/not installed badge
- One-off sync from any supported redirect plugin without changing Settings
- Dynamic sync labels on Import and Dashboard
[1.0.27] - 2026-07-21
Fixed
- Health Issues table column overlap (Type/Message/URL layout)
- Import page file drop zones and icons forced readable in dark admin themes
[1.0.26] - 2026-07-21
Added
- Health Issues table filters: severity, type, search, per-page, and pagination
[1.0.25] - 2026-07-21
Changed
- Redesigned app header and pill-style navigation tabs across all admin pages
- Health Issues: KPI cards, issue type filter chips, improved issue log layout
- Import page: featured sync card and 2-column import method grid
- Monitored Items: improved filter bar layout
[1.0.24] - 2026-07-21
Changed
- Redesigned dashboard with KPI cards, content bar chart, health donut chart, and quick filter chips
[1.0.23] - 2026-07-21
Fixed
- Monitored Items table headers stay on one line (HTTP Code, Post Type, etc.)
[1.0.22] - 2026-07-21
Added
- Monitored Items: sortable column headers (Title, URL, Post Type, Status, HTTP Code, Last Scan)
- Monitored Items: Sitemap filter (Excluded / Included) and Reset filters button
Fixed
- Sync from Redirection now imports only URLs linked to a real WordPress page (no more MISSING ghost entries)
- Sync cleanup removes orphan redirect-only entries on each run
- Redirect Provider filter now matches synced provider slugs and legacy labels
[1.0.21] - 2026-07-21
Added
- Sync from Redirection: import all active 301 redirect rules into Monitored Items automatically
- Sync runs before full, redirect, and scheduled scans; manual button on Dashboard and Import
[1.0.20] - 2026-07-21
Added
- Live redirect detection at sitemap generation: pages with active 301 rules in Redirection (and other providers) are excluded from XML sitemaps without import
[1.0.19] - 2026-07-21
Fixed
- Health Issues table: Severity and Type columns no longer wrap or break mid-word
[1.0.18] - 2026-07-21
Changed
- All admin pages (Dashboard, Monitored Items, Import, Health Issues, Settings) now use full-width layout
[1.0.17] - 2026-07-21
Fixed
- Redirect chain health checks now use live Redirection plugin rules instead of imported Monitored Items data
- Chain messages show the full redirect path and correct redirect count (not URL count)
- Health Issues table shows expandable chain steps for redirect_chains warnings
[1.0.16] - 2026-07-21
Fixed
- Health check false positives for broken_redirects when redirect targets exist in WordPress but are not imported as monitored items
- Redirect targets with URL fragments (#peo, etc.) are validated against the base page URL
[1.0.15] - 2026-07-21
Added
- Per-page selector (10, 20, 50, 100) on Monitored Items with saved user preference
Fixed
- Bulk actions Apply button now works reliably (removed duplicate bottom bar and fixed action selection bug)
[1.0.14] - 2026-07-21
Changed
- Monitored Items pagination now matches native WordPress admin styling and preserves active filters
[1.0.13] - 2026-07-21
Added
- Native Ahrefs CSV redirect export support with redirect target and HTTP code import
Changed
- CSV import pre-fills redirect metadata and applies sitemap exclusion for imported 301 URLs
[1.0.12] - 2026-07-21
Changed
- Reduced InfoWebPlus branding in the admin UI (removed header credit and page footer)
[1.0.11] - 2026-07-21
Changed
- Monitored Items page uses full-width admin layout with horizontal scroll for wide tables
[1.0.10] - 2026-07-21
Fixed
- Redirection plugin integration now correctly detects 301 redirects (array API + get_match flow)
- Hierarchical page paths now show full parent path in the Monitored Items table (renamed Slug column to Path)
[1.0.9] - 2026-07-21
Fixed
- Monitored Items table replaced WP_List_Table with plain HTML table for Avada and other admin theme compatibility
[1.0.8] - 2026-07-21
Fixed
- Monitored Items table showing item count but no visible rows on Avada and other admin themes
- WP_List_Table column headers not initialized before rendering
- Admin CSS forcing list table visibility inside bulk-action forms
[1.0.0] - 2026-03-21
Added
- Initial release
- Monitored content tracking for pages, posts, and custom post types
- CSV, XLSX, and manual URL import
- Redirect providers: Redirection, Rank Math, Yoast Premium, Safe Redirect Manager, Simple 301 Redirects
- SEO adapters: Yoast, Rank Math, SEOPress, All in One SEO
- Automatic sitemap exclusion for active 301 redirects
- SEO health checks with critical, warning, and info severity
- Admin dashboard with statistics and scan history
- Monitored items table with filters, bulk actions, and pagination
- Scheduled scans via WP Cron (daily, weekly, monthly, custom)
- Secure REST API endpoints
- WP-CLI commands:
scan,stats,import - Email notifications for critical errors and weekly reports
- Multisite support
- Uninstall option to keep or delete data
- PHPUnit tests, PHPCS, PHPStan, and GitHub Actions CI