{"id":366487,"date":"2026-09-09T17:51:19","date_gmt":"2026-09-09T17:51:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/no404-auto-404-redirect\/"},"modified":"2026-09-09T18:43:24","modified_gmt":"2026-09-09T18:43:24","slug":"no404-auto-404-redirect","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/no404-auto-404-redirect\/","author":23562689,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"no404 \u2013 Auto 404 Redirect","header_author":"no404","header_description":"Automatically redirects visitors who hit a 404 to the closest matching live URL on your site, using a real server-side 301.","assets_banners_color":"fefefd","last_updated":"2026-09-09 18:43:24","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/no404.tr","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":51,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"ropillc","date":"2026-09-09 17:50:57","revision":3688794},"1.0.1":{"tag":"1.0.1","author":"ropillc","date":"2026-09-09 18:43:24","revision":3688852}},"upgrade_notice":{"1.0.1":"<p>Fixes the connection test failing with &quot;unexpected response (HTTP 302)&quot; on a fresh install. Recommended for everyone.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3688792,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3688792,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3688792,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3688792,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3688792,"resolution":"1","location":"assets","locale":"","width":1448,"height":1086},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3688792,"resolution":"2","location":"assets","locale":"","width":1448,"height":1086},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3688792,"resolution":"3","location":"assets","locale":"","width":1448,"height":1086},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3688792,"resolution":"4","location":"assets","locale":"","width":1448,"height":1086},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3688792,"resolution":"5","location":"assets","locale":"","width":1448,"height":1086}},"screenshots":{"1":"Turn 404 errors into relevant redirects automatically with real server-side 301\/302 redirects.","2":"Automatically match broken URLs with the closest relevant live pages without creating redirect rules one by one.","3":"Set up no404 in minutes by installing the plugin, adding your API key, and testing the connection.","4":"Protect SEO and paid traffic by redirecting visitors from broken landing pages, search results, and old backlinks.","5":"Built for WooCommerce stores and changing catalogs, including deleted products, renamed URLs, seasonal pages, and migrations."}},"plugin_section":[],"plugin_tags":[932,905,14279,727,186],"plugin_category":[55],"plugin_contributors":[279989],"plugin_business_model":[],"class_list":["post-366487","plugin","type-plugin","status-publish","hentry","plugin_tags-932","plugin_tags-905","plugin_tags-broken-links","plugin_tags-redirect","plugin_tags-seo","plugin_category-seo-and-marketing","plugin_contributors-ropillc","plugin_committers-ropillc"],"banners":{"banner":"https:\/\/ps.w.org\/no404-auto-404-redirect\/assets\/banner-772x250.png?rev=3688792","banner_2x":"https:\/\/ps.w.org\/no404-auto-404-redirect\/assets\/banner-1544x500.png?rev=3688792","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/no404-auto-404-redirect\/assets\/icon-128x128.png?rev=3688792","icon_2x":"https:\/\/ps.w.org\/no404-auto-404-redirect\/assets\/icon-256x256.png?rev=3688792","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/no404-auto-404-redirect\/assets\/screenshot-1.png?rev=3688792","caption":"Turn 404 errors into relevant redirects automatically with real server-side 301\/302 redirects."},{"src":"https:\/\/ps.w.org\/no404-auto-404-redirect\/assets\/screenshot-2.png?rev=3688792","caption":"Automatically match broken URLs with the closest relevant live pages without creating redirect rules one by one."},{"src":"https:\/\/ps.w.org\/no404-auto-404-redirect\/assets\/screenshot-3.png?rev=3688792","caption":"Set up no404 in minutes by installing the plugin, adding your API key, and testing the connection."},{"src":"https:\/\/ps.w.org\/no404-auto-404-redirect\/assets\/screenshot-4.png?rev=3688792","caption":"Protect SEO and paid traffic by redirecting visitors from broken landing pages, search results, and old backlinks."},{"src":"https:\/\/ps.w.org\/no404-auto-404-redirect\/assets\/screenshot-5.png?rev=3688792","caption":"Built for WooCommerce stores and changing catalogs, including deleted products, renamed URLs, seasonal pages, and migrations."}],"raw_content":"<!--section=description-->\n<p>When you delete a product, change a permalink or migrate a site, the old URLs keep getting traffic. Visitors land on an empty 404 page, and the traffic and the signals those old links carry go nowhere.<\/p>\n\n<p>Most redirect plugins ask you to fix this by hand: you write a rule for every broken URL. That does not scale past a few dozen.<\/p>\n\n<p><strong>no404 works the other way around.<\/strong> It keeps a synchronised index of the URLs your site actually has, and when a request 404s it finds the closest match in that index automatically. You write no rules.<\/p>\n\n<h4>How it is different<\/h4>\n\n<ul>\n<li><strong>No manual rules.<\/strong> Other plugins need <code>\/old-url<\/code> \u2192 <code>\/new-url<\/code> written out one at a time. no404 matches against your live catalogue, so a deleted product URL finds its closest surviving equivalent on its own.<\/li>\n<li><strong>A real 301, server side.<\/strong> JavaScript based solutions leave the HTTP status at 404, so Google still sees a dead page and bots that do not run JavaScript are never redirected. This plugin redirects before any HTML is sent.<\/li>\n<li><strong>It defers to your existing setup.<\/strong> no404 runs late on <code>template_redirect<\/code>, so Yoast SEO, Rank Math and Redirection get to act first. It is a last resort, not a competitor to your redirect table.<\/li>\n<\/ul>\n\n<h4>Your site never waits<\/h4>\n\n<p>If the service is slow or unreachable, the plugin steps aside and your theme's own 404 page renders normally. Requests time out after 1.5 seconds, and after a failure the plugin stops calling out entirely for a short while instead of adding that delay to every 404.<\/p>\n\n<h4>301 or 302?<\/h4>\n\n<p>The default is deliberately cautious, because 301s may be cached aggressively by browsers and search engines and can be hard to reverse quickly:<\/p>\n\n<ul>\n<li>Redirects you defined by hand in your no404 dashboard \u2192 <strong>301<\/strong><\/li>\n<li>High confidence catalogue matches (score 0.5 and above) \u2192 <strong>301<\/strong><\/li>\n<li>Lower confidence matches and fallbacks \u2192 <strong>302<\/strong><\/li>\n<\/ul>\n\n<p>You can force everything to 301 in the settings, but it is off by default.<\/p>\n\n<h4>Quota friendly by design<\/h4>\n\n<p>Results are cached locally for an hour, including \"no match found\". A bot hammering the same dead URL two hundred times a day costs you one lookup, not two hundred. Static files (.css, .js, .png and so on) and admin paths such as \/wp-admin and \/wp-json are never sent to the service at all.<\/p>\n\n<h4>WooCommerce<\/h4>\n\n<p>Deleted product URLs are the main thing this plugin was built for. It does not interfere with WooCommerce permalink structures.<\/p>\n\n<h4>Account required<\/h4>\n\n<p>The matching engine runs as a hosted service, so the plugin needs a free no404 account and an API key. The free plan covers 1,000 lookups per month. See the External services section below for exactly what is transmitted.<\/p>\n\n<h4>Languages<\/h4>\n\n<p>The plugin is written in English and ships with translations for Turkish, German, French, Spanish, Russian, Hindi and Arabic (right-to-left). It follows the language of your WordPress installation, so there is nothing to configure.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin relies on the no404 service to work out where a broken URL should be redirected. The matching is done remotely, against an index of your site built from your sitemap, so the plugin cannot perform it on its own.<\/p>\n\n<p><strong>When data is sent<\/strong><\/p>\n\n<p>A request is sent when a visitor hits a 404 page, and only then. Requests are not sent when:<\/p>\n\n<ul>\n<li>the result for that path is already in the local cache (one hour by default),<\/li>\n<li>the path is a static file or an administrative path (see the exclusion list in the settings),<\/li>\n<li>the request is not a GET or HEAD request,<\/li>\n<li>the service recently failed or the request limit was reached.<\/li>\n<\/ul>\n\n<p><strong>What is sent<\/strong><\/p>\n\n<ul>\n<li>The path that returned 404, for example <code>\/old-product<\/code>. Query strings are stripped before sending.<\/li>\n<li>The referring URL, taken from the HTTP <code>Referer<\/code> header, when the browser supplies one.<\/li>\n<li>Your site's home URL and the plugin version, sent in the User-Agent header to identify the installation.<\/li>\n<li>Your API key, which identifies your account.<\/li>\n<\/ul>\n\n<p><strong>What is not sent<\/strong><\/p>\n\n<p>The plugin does not transmit the visitor's IP address, the visitor's user agent, cookies, session data, form contents, or any other personal data.<\/p>\n\n<p><strong>Service provider<\/strong><\/p>\n\n<p>The service is operated by no404, https:\/\/no404.tr<\/p>\n\n<ul>\n<li>Terms of Service: https:\/\/no404.tr\/terms<\/li>\n<li>Privacy Policy: https:\/\/no404.tr\/privacy<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Create an account at https:\/\/no404.tr and add your site through Google Search Console.<\/li>\n<li>Open your site in the no404 dashboard, go to Integration, and copy the API key.<\/li>\n<li>In WordPress, go to Settings \u2192 no404, paste the key and save.<\/li>\n<li>Click \"Test the connection\" to confirm everything works.<\/li>\n<\/ol>\n\n<p>The API key is the only value you need to enter. The service address field is already filled in correctly.<\/p>\n\n<p>The API key is used server side only and never appears in your site's HTML.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20account%3F\"><h3>Do I need an account?<\/h3><\/dt>\n<dd><p>Yes. The matching engine is a hosted service, so the plugin needs an API key. There is a free plan that covers 1,000 lookups per month, and local caching means a lookup is not the same as a page view.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20the%20no404%20service%20goes%20down%3F\"><h3>What happens if the no404 service goes down?<\/h3><\/dt>\n<dd><p>Nothing breaks. The plugin fails open: if a request times out or errors, no redirect happens and your theme's 404 page is shown as usual. The wait is capped by the timeout you configure, 1.5 seconds by default, and only ever applies to 404 pages. After a failure the plugin pauses outgoing requests for a while so a service outage does not add that delay to every 404 on your site.<\/p><\/dd>\n<dt id=\"does%20every%20404%20use%20up%20part%20of%20my%20quota%3F\"><h3>Does every 404 use up part of my quota?<\/h3><\/dt>\n<dd><p>No. Results are cached for an hour by default, so the same URL costs at most one lookup per hour. Results with no match are cached too. Static files and admin paths are never sent.<\/p><\/dd>\n<dt id=\"it%20redirected%20someone%20to%20the%20wrong%20page.%20how%20do%20i%20fix%20that%3F\"><h3>It redirected someone to the wrong page. How do I fix that?<\/h3><\/dt>\n<dd><p>Add a manual redirect for that URL in your no404 dashboard. Manual redirects always take priority over automatic matches. Note that if the redirect was sent as a 301, browsers may have cached it, which is why speculative matches are sent as 302 by default.<\/p><\/dd>\n<dt id=\"will%20it%20conflict%20with%20yoast%20seo%2C%20rank%20math%20or%20redirection%3F\"><h3>Will it conflict with Yoast SEO, Rank Math or Redirection?<\/h3><\/dt>\n<dd><p>No. The plugin hooks into <code>template_redirect<\/code> at a very low priority, so those plugins resolve their own redirect tables first. no404 only acts on 404s that nothing else handled.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20multisite%3F\"><h3>Does it work on multisite?<\/h3><\/dt>\n<dd><p>Yes. Each site keeps its own API key, its own settings and its own cache.<\/p><\/dd>\n<dt id=\"how%20can%20i%20tell%20that%20a%20redirect%20came%20from%20this%20plugin%3F\"><h3>How can I tell that a redirect came from this plugin?<\/h3><\/dt>\n<dd><p>Redirected responses carry an <code>X-Redirect-By: no404<\/code> header. Every request is also listed in the 404 Events tab of your no404 dashboard.<\/p><\/dd>\n<dt id=\"can%20i%20exclude%20certain%20urls%3F\"><h3>Can I exclude certain URLs?<\/h3><\/dt>\n<dd><p>Yes. Settings \u2192 no404 has an \"Excluded paths\" field. Enter one path prefix per line. Static files and admin paths are excluded automatically.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20slow%20down%20my%20site%3F\"><h3>Does the plugin slow down my site?<\/h3><\/dt>\n<dd><p>Normal pages are untouched, because the plugin only runs when WordPress has already decided the request is a 404. On a 404, a cached result adds no network wait at all.<\/p><\/dd>\n<dt id=\"what%20language%20does%20the%20plugin%20use%3F\"><h3>What language does the plugin use?<\/h3><\/dt>\n<dd><p>It follows your WordPress language setting. English is the default, and translations are bundled for Turkish, German, French, Spanish, Russian, Hindi and Arabic. If your language is not among them, the plugin falls back to English rather than showing untranslated placeholders.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fixed: the connection test reported \"unexpected response (HTTP 302)\" on a fresh install. The bundled address, https:\/\/no404.tr, redirects to the www host, and the plugin did not follow it. The default is now https:\/\/www.no404.tr, sites upgrading from 1.0.0 are moved across automatically, and a redirect the plugin cannot follow now names the address to use instead of reporting an unexpected response.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Server side 301\/302 redirects on <code>template_redirect<\/code>.<\/li>\n<li>Local caching, including negative results, with a circuit breaker for outages.<\/li>\n<li>Exclusion list for static files and administrative paths.<\/li>\n<li>Open redirect and redirect loop protection.<\/li>\n<li>Connection test that reports invalid key, inactive subscription and quota errors separately.<\/li>\n<li>Multisite support.<\/li>\n<\/ul>","raw_excerpt":"Automatically redirect 404s to the closest matching live URL on your site, with a real server-side 301. No manual redirect rules.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/366487","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=366487"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ropillc"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=366487"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=366487"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=366487"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=366487"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=366487"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=366487"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}