{"id":351607,"date":"2026-08-11T10:47:52","date_gmt":"2026-08-11T10:47:52","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/effortless-smart-page-redirects\/"},"modified":"2026-08-14T14:04:53","modified_gmt":"2026-08-14T14:04:53","slug":"effortless-smart-page-redirects","status":"publish","type":"plugin","link":"https:\/\/tir.wordpress.org\/plugins\/effortless-smart-page-redirects\/","author":23148025,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.6.11","stable_tag":"1.6.11","tested":"7.0.4","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"EffortLess Smart Page Redirects","header_author":"domclic","header_description":"Redirect a WordPress page to any URL, either immediately (301) or after a short delay so analytics scripts can record the visit first. Multisite compatible.","assets_banners_color":"","last_updated":"2026-08-14 14:04:53","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/id7.dev\/donate\/","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":88,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.6.11":{"tag":"1.6.11","author":"domclic","date":"2026-08-14 14:04:53"},"1.6.8":{"tag":"1.6.8","author":"domclic","date":"2026-08-11 10:48:57"},"1.6.9":{"tag":"1.6.9","author":"domclic","date":"2026-08-13 14:12:13"}},"upgrade_notice":{"1.6.11":"<p>Fixes network-wide rules on multisite, which matched unrelated content on the other sites. Update recommended on multisite installs.<\/p>","1.6.10":"<p>Rules match on the target page ID only again. On a network, review any rule that relied on the 1.6.8 slug matching to reach a page on another site.<\/p>","1.6.9":"<p>Fixes immediate (301) rules that point at a URL on another domain. Update recommended.<\/p>","1.6.8":"<p>Fixes network-wide redirect rules on multisite and adds slug matching as a fallback. Update recommended on multisite installs.<\/p>","1.6.7":"<p>Documentation update only. No changes to plugin behaviour.<\/p>","1.6.6":"<p>Fixes a plugin slug \/ text domain mismatch. Update recommended.<\/p>","1.6.5":"<p>Internal identifier prefix migration (automatic, no action needed) plus compliance fixes. Update recommended.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.6.11","1.6.8","1.6.9"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[950,232,13145,441,2711],"plugin_category":[36,51],"plugin_contributors":[241557],"plugin_business_model":[],"class_list":["post-351607","plugin","type-plugin","status-publish","hentry","plugin_tags-301-redirect","plugin_tags-analytics","plugin_tags-meta-refresh","plugin_tags-multisite","plugin_tags-page-redirect","plugin_category-analytics","plugin_category-multisite","plugin_contributors-domclic","plugin_committers-domclic"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/effortless-smart-page-redirects.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>EffortLess Smart Page Redirects lets you send visitors of a specific WordPress page to another URL. Each redirect is stored as its own \"Redirect Rule\", so you can add, edit, disable (by moving the rule to draft) or delete redirects without touching theme files or the <code>.htaccess<\/code> file.<\/p>\n\n<p>Two redirect modes are available per rule:<\/p>\n\n<ul>\n<li><strong>Immediate redirect (default).<\/strong> The page never renders; WordPress sends a <code>301 Moved Permanently<\/code> response to the destination URL.<\/li>\n<li><strong>Delayed redirect (\"Analytics-Safe Redirect\").<\/strong> The page starts loading, a full-screen overlay with a loading spinner is shown, and the browser is sent to the destination after a delay you choose (0.5 to 10 seconds). Because the page is actually loaded, analytics scripts that run on it \u2014 such as Matomo, Google Analytics 4 or Google Tag Manager \u2014 have time to fire and record the pageview before the visitor leaves.<\/li>\n<\/ul>\n\n<p>The delayed mode can use either a <code>&lt;meta http-equiv=\"refresh\"&gt;<\/code> tag or a JavaScript <code>setTimeout()<\/code> call, selectable per rule.<\/p>\n\n<h4>What each setting does<\/h4>\n\n<p>Every Redirect Rule has the following fields:<\/p>\n\n<ul>\n<li><strong>Page to Redirect<\/strong> \u2014 the published page whose visitors will be redirected. The dropdown lists your pages with their IDs.<\/li>\n<li><strong>Destination URL<\/strong> \u2014 the full target URL, including the <code>https:\/\/<\/code> scheme. It may point to another page on your site or to an external address.<\/li>\n<li><strong>Network Wide<\/strong> (multisite only) \u2014 when checked, the rule is also evaluated on the other sites of the network. On those sites it applies to the content whose <strong>slug<\/strong> matches the slug of the selected page (see \"How a rule is matched\" below).<\/li>\n<li><strong>Analytics-Safe Redirect<\/strong> \u2014 unchecked means an immediate <code>301<\/code>; checked switches the rule to the delayed mode and reveals the two settings below.<\/li>\n<li><strong>Delay Method<\/strong> \u2014 <code>Meta Refresh<\/code> (works without JavaScript) or <code>JavaScript<\/code>.<\/li>\n<li><strong>Delay (seconds)<\/strong> \u2014 how long to wait before leaving the page, between 0.5 and 10 seconds. Between 1.5 and 3 seconds is usually enough for a tracking script to send its request.<\/li>\n<\/ul>\n\n<h4>How a rule is matched<\/h4>\n\n<p>How a rule is matched depends on where it was created, because page IDs are per site: every site of a network has its own set of pages numbered from 1, so the ID <code>42<\/code> refers to different content on every site.<\/p>\n\n<ul>\n<li><strong>On the site where the rule was created<\/strong>, the rule applies to the content that has the page ID selected in the rule. This is exact and is unaffected by slugs.<\/li>\n<li><strong>On the other sites of a network<\/strong> (only for rules with <strong>Network Wide<\/strong> checked), the rule applies to the content whose slug matches the slug of the page selected in the rule. The rule's page ID is ignored on those sites, because it does not identify the same content there.<\/li>\n<\/ul>\n\n<p>A site's own rules are checked first, so a rule created on a site always wins over a network-wide rule inherited from another site for the same content.<\/p>\n\n<p>A rule stops applying on its own site if its target page is deleted and recreated, because the new page receives a new ID. Re-select the page in the rule when that happens.<\/p>\n\n<h4>Notes and limitations<\/h4>\n\n<ul>\n<li>A rule only takes effect once it is <strong>published<\/strong>. Rules kept as drafts are ignored, which is a convenient way to switch a redirect off temporarily.<\/li>\n<li>Only one rule is applied per page; if several published rules point at the same page, the first one found is used.<\/li>\n<li>On multisite, a network-wide rule reaches another site only if that site has content with the <strong>same slug<\/strong> as the rule's target page. If the slug differs there, the rule does not apply on that site.<\/li>\n<li>A rule whose destination is the page it redirects is ignored, so a rule cannot send visitors back to where they already are.<\/li>\n<li>Rules are cached for one hour per site to avoid a database query on every page view. The cache is refreshed when a rule is saved, trashed, restored or deleted \u2014 on multisite this applies to every site of the network, so a network-wide rule takes effect everywhere immediately.<\/li>\n<li>On multisite, the network-wide rules of every site are kept in a network option that is rebuilt whenever a rule changes, so displaying a page never queries the other sites of the network.<\/li>\n<li>Redirects are not applied in the admin area or in the block\/theme editor preview.<\/li>\n<li>The plugin adds no tracking of its own and sends no data anywhere.<\/li>\n<\/ul>\n\n<h3>Donate<\/h3>\n\n<p>If this plugin is useful to you and you would like to support its maintenance, donations are welcome at https:\/\/id7.dev\/donate\/ , including in Bitcoin (BTC): bc1q8a9a5khvfyxlptfyyrpn2x44a4hq40qxql6tx4<\/p>\n\n<!--section=installation-->\n<ol>\n<li>In your WordPress admin, go to <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong> and upload the plugin zip file, or copy the <code>effortless-smart-page-redirects<\/code> folder into <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu.<\/li>\n<li>A <strong>Redirect Rules<\/strong> menu appears in the admin sidebar. Go to <strong>Redirect Rules \u2192 Add New<\/strong>.<\/li>\n<li>Give the rule a title for your own reference (for example \"Old pricing page\").<\/li>\n<li>In the <strong>Redirect Settings<\/strong> box, choose the <strong>Page to Redirect<\/strong> and type the <strong>Destination URL<\/strong>.<\/li>\n<li>Leave <strong>Analytics-Safe Redirect<\/strong> unchecked for a standard <code>301<\/code> redirect, or check it and set the delay method and delay if you want your analytics to record the visit first.<\/li>\n<li>Click <strong>Publish<\/strong>. The redirect is active immediately.<\/li>\n<\/ol>\n\n<p>To disable a redirect later, edit the rule and switch it back to draft, or move it to the trash.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20is%20the%20difference%20between%20the%20two%20redirect%20modes%3F\"><h3>What is the difference between the two redirect modes?<\/h3><\/dt>\n<dd><p>The immediate mode sends a <code>301 Moved Permanently<\/code> header before anything is rendered, which is what search engines expect for a permanent move. The delayed mode loads the page first, shows a spinner overlay, and then moves the visitor to the destination. Use the delayed mode when you need scripts on the page \u2014 analytics in particular \u2014 to run before the visitor leaves.<\/p><\/dd>\n<dt id=\"which%20analytics%20tools%20does%20the%20delayed%20mode%20work%20with%3F\"><h3>Which analytics tools does the delayed mode work with?<\/h3><\/dt>\n<dd><p>It is not tied to a specific tool. The plugin simply keeps the visitor on the page for the delay you configure, so any script that is already loaded on that page, including Matomo, Google Analytics 4 and Google Tag Manager, has that time to send its request. Whether a given pageview is recorded depends on how quickly that script loads on your site; increase the delay if visits are missing.<\/p><\/dd>\n<dt id=\"does%20it%20support%20301%20redirects%3F\"><h3>Does it support 301 redirects?<\/h3><\/dt>\n<dd><p>Yes. Rules with <strong>Analytics-Safe Redirect<\/strong> unchecked are sent as <code>301 Moved Permanently<\/code> via <code>wp_safe_redirect()<\/code>. The delayed mode is a client-side redirect and does not send a <code>301<\/code> status.<\/p><\/dd>\n<dt id=\"can%20i%20redirect%20to%20an%20external%20site%3F\"><h3>Can I redirect to an external site?<\/h3><\/dt>\n<dd><p>Yes. Enter the full URL in the <strong>Destination URL<\/strong> field.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20multisite%3F\"><h3>Does it work on multisite?<\/h3><\/dt>\n<dd><p>Yes. Rules are created per site, and checking <strong>Network Wide<\/strong> makes a rule apply on the other sites of the network as well. On those sites the rule matches content whose slug is the same as the target page's slug, since page IDs are not shared between sites.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20down%20my%20site%3F\"><h3>Will it slow down my site?<\/h3><\/dt>\n<dd><p>The list of published rules is read once and cached for an hour per site, and the check runs only on single pages and posts on the front end. Pages without a matching rule are left untouched.<\/p><\/dd>\n<dt id=\"i%20created%20a%20rule%20but%20nothing%20happens\"><h3>I created a rule but nothing happens<\/h3><\/dt>\n<dd><p>Check that the rule is published rather than saved as a draft, that both the page and the destination URL are filled in (the rule is not saved if either is empty), and that you are testing on the front end while not previewing the page from the editor.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.6.11<\/h4>\n\n<ul>\n<li>Fixed: A network-wide rule reaching another site of the network is now matched on the target page's slug instead of its numeric page ID. Page IDs are per site, so the rule was previously applied to whatever unrelated content happened to carry that number on the other sites, and did not reach the intended page at all<\/li>\n<li>Fixed: A rule whose destination is the page being redirected is now ignored instead of redirecting to itself until the browser reports too many redirects<\/li>\n<li>Fixed: Networks with more than 100 sites no longer have the rules of the remaining sites ignored<\/li>\n<li>Improved: The network-wide rules of the other sites are read from a network option rebuilt when a rule changes, instead of querying every site of the network while a page is being displayed<\/li>\n<li>Fixed: The active site is restored even if collecting another site's rules fails partway through<\/li>\n<\/ul>\n\n<h4>1.6.10<\/h4>\n\n<ul>\n<li>Removed: Rules are matched on the target page ID only again. The slug-based fallback added in 1.6.8 also compared against the network-wide rules of the other sites of a network, so a rule whose target page merely shared a slug with the page being viewed could take over that page<\/li>\n<li>Fixed: The page ID comparison now casts both sides to an integer, so a rule is matched whether or not the queried post exposes its ID as a string<\/li>\n<\/ul>\n\n<h4>1.6.9<\/h4>\n\n<ul>\n<li>Fixed: Immediate (301) rules pointing at a URL on another domain sent the visitor to the site's admin URL instead of the destination, because the destination host was not on the list of hosts WordPress permits redirecting to. The host of the rule being applied is now permitted for that single redirect<\/li>\n<\/ul>\n\n<h4>1.6.8<\/h4>\n\n<ul>\n<li>Added: A rule is now also matched on the target page slug when no content matches its page ID, so a network-wide rule works across sites whose page IDs differ<\/li>\n<li>Fixed: Network-wide rules coming from another site of the network were read against the current site's tables, so their destination URL and options could be missing or wrong<\/li>\n<li>Fixed: The cached rule list is now refreshed when a rule is trashed, restored or deleted, when a slug changes, and across every site of a network instead of only the site where the rule was saved<\/li>\n<\/ul>\n\n<h4>1.6.7<\/h4>\n\n<ul>\n<li>Improved: Rewritten readme with a factual description of the plugin, a description of every setting, and clearer configuration steps<\/li>\n<li>Improved: Plugin header description reworded without marketing claims<\/li>\n<\/ul>\n\n<h4>1.6.6<\/h4>\n\n<ul>\n<li>Fixed: Text Domain now matches the plugin slug (<code>effortless-smart-page-redirects<\/code>, was singular <code>effortless-smart-page-redirect<\/code>)<\/li>\n<\/ul>\n\n<h4>1.6.5<\/h4>\n\n<ul>\n<li>Fixed: Plugin identifiers now use the <code>elspr_<\/code> \/ <code>ELSPR_<\/code> prefix (was <code>espr_<\/code>), with a one-time automatic migration of existing redirect rules<\/li>\n<li>Fixed: Version number mismatch between plugin header and code<\/li>\n<li>Fixed: Inline <code>&lt;script&gt;<\/code>\/<code>&lt;style&gt;<\/code> tags replaced with properly enqueued assets<\/li>\n<li>Added: Donate link plugin header and standardized donate notice<\/li>\n<li>Improved: Tested up to WordPress 7.0<\/li>\n<\/ul>\n\n<h4>1.6.3<\/h4>\n\n<ul>\n<li>Fixed: Remaining PHPCS warning on the network-wide rules query<\/li>\n<li>Improved: Spinner font stack<\/li>\n<\/ul>\n\n<h4>1.6.2<\/h4>\n\n<ul>\n<li>Added: Object caching of redirect rules<\/li>\n<li>Fixed: Sanitization of the destination URL<\/li>\n<li>Fixed: Script enqueuing with version and footer loading<\/li>\n<li>Improved: Early exit when the current page has no rule<\/li>\n<\/ul>\n\n<h4>1.6.1<\/h4>\n\n<ul>\n<li>Fixed: Typo in save_meta() that prevented rules from being stored<\/li>\n<li>Improved: Escaping and sanitization<\/li>\n<li>Changed: The JavaScript redirect now uses wp_add_inline_script()<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Redirect a WordPress page to any URL, either immediately (301) or after a short delay so analytics scripts can record the visit first.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tir.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/351607","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tir.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/tir.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/tir.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=351607"}],"author":[{"embeddable":true,"href":"https:\/\/tir.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/domclic"}],"wp:attachment":[{"href":"https:\/\/tir.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=351607"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/tir.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=351607"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/tir.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=351607"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/tir.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=351607"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/tir.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=351607"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/tir.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=351607"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}