301 Redirects in WordPress: Fix 404s Without Redirect Chains
Use a 301 for permanent moves, a 302 only for temporary ones, and always redirect to the final URL. How to find every 404 on a WordPress site and fix it cleanly.
Use a 301 redirect when a URL has moved permanently and a 302 only when the original URL is coming back. Always redirect to the final live page, never to another redirect, and never to the homepage as a catch-all. Find the 404s worth fixing from Google Search Console, your server logs and a site audit, then pair each one that carries links or traffic with a single-hop 301 and let the rest return an honest 404.
That is the whole discipline in three sentences. The rest of this guide is about why each part matters, how to do it in WordPress without touching server configuration, and how to stop redirect chains from quietly accumulating over the years. Where we mention Hydrogen SEO's redirection manager as a worked example, note that RankWave AI and Hydrogen SEO are both built by Sheesh Labs, so read those parts as a builder's view rather than a neutral recommendation; the rules themselves apply whatever tool you use.
301 vs 302: which should you use?
An HTTP status code is the server's one-line answer to "where is this page?". A 301 Moved Permanently says the page lives at a new address forever, and search engines respond by transferring the old URL's accumulated signals to the new one and eventually swapping it in the index. A 302 Found says the page is elsewhere for now but this address remains its home, so search engines keep the original URL indexed and treat the destination as a stand-in. Visitors land on the target either way; the difference is almost entirely in what you are telling crawlers.
| Situation | Use | Why |
|---|---|---|
| Post or page moved to a new slug | 301 | The move is permanent; you want the new URL indexed |
| Two overlapping articles merged into one | 301 | Old URLs hand everything to the combined page |
| Domain change or HTTP to HTTPS migration | 301 | Every old URL has a permanent new home |
| Product discontinued, close replacement exists | 301 | The URL is never coming back |
| Product out of stock, returning soon | 302 | Temporary state, permanent URL |
| Seasonal page redirected off-season | 302 | The page is coming back; keep its history |
| A/B test sending traffic to a variant | 302 | The original stays canonical while you test |
| Maintenance or "coming soon" detour | 302 | Days or weeks, not forever |
| Content gone, nothing replaces it | 404 or 410 | Honest; a redirect to unrelated content is a soft 404 |
Two folklore points are worth clearing up. First, you will read that a 301 passes exactly 100% of PageRank and a 302 passes none; nobody outside Google can measure either figure, and Google has said publicly that a long-standing 302 is eventually treated like a 301. Second, that "eventually" is unpaid work you could have done deliberately. The classic mistake is the accidental permanent 302, installed during a redesign and forgotten for two years. If you cannot remember why a 302 exists, that is your answer: make it a 301. The 301 vs 302 decision reference covers 307 and 308 too, though for WordPress content SEO the two classic codes cover every real case.
What do 404s really cost?
A 404 is not an emergency in itself. Every healthy site returns some, and Google expects it. The cost comes from 404s on URLs that used to matter, and it arrives in three forms, none of which needs an invented statistic to be real.
- Lost link equity. When a page that earned external links dies without a redirect, everything those links conferred stops flowing anywhere. That authority was earned once and is simply discarded. Internal links still pointing at the dead URL leak the same way.
- Crawl waste. Crawlers revisit URLs they have seen before. Every request spent on a dead URL is attention not spent discovering or refreshing your live pages. On a large site, thousands of lingering 404s meaningfully dilute how often the pages you care about are crawled.
- Lost visitors. Someone who followed a link from another site, an old newsletter or a search result and lands on "Not Found" rarely tries a second URL. The error page is often the whole first impression.
The practical implication is that 404s are a triage problem, not a cleanliness problem. You want a list ranked by what each URL carries, not a count driven to zero.
How do you find every 404 on a WordPress site?
No single source sees everything, so use three and merge the lists.
Google Search Console
Go to Indexing → Pages and look under "Why pages aren't indexed" for Not found (404). Export the list. These are URLs Google itself crawled and found missing, usually because something links to them, which makes them the highest-priority set. Then open Links → Top linked pages and check whether any URL earning backlinks now returns a 404; those are the most expensive dead ends you have.
A site audit for broken internal links
Broken internal links are the 404s entirely under your control, because your own pages are actively sending visitors and crawlers into them. A crawler-style audit lists each broken target alongside the page linking to it. The free Hydrogen SEO plugin's site audit does this from Hydrogen SEO → Dashboard and the docs walk through the workflow to find and fix 404 errors; any site crawler that reports broken internal links will give you the same list.
Server logs and analytics
Your host's access logs, filtered for status 404 and sorted by hit count, surface what real traffic is requesting: inbound typos from other sites, truncated URLs in emails, old attachment paths still embedded somewhere. Neither Search Console nor your own audit would flag a URL you never created. If you cannot reach raw logs, your analytics platform's page report filtered to your 404 page title is a workable substitute.
What is a redirect chain and why does it matter?
A redirect chain is a redirect that points at another redirect: A → B → C. Chains almost never get built on purpose. They accumulate as a site ages: a 2019 slug change stacked under a 2022 category restructure stacked under an HTTPS migration, each layer added by someone who did not know about the one below. Every hop adds latency for every visitor, crawlers follow only a limited number of hops before abandoning the URL, and signals pass less cleanly through several hops than through one.
The fix is flattening. Point A directly at C and B directly at C. The habit that prevents new chains is a single question every time you add a rule: does anything already redirect to the URL I am now redirecting away from? If so, repoint that older rule at the new final destination in the same sitting. A redirect loop, where a source eventually redirects back to itself, is the same problem taken to its limit and will show as an error in the browser; edit or delete one of the rules involved.
Chains are also why redirects belong in one place. Rules scattered across an .htaccess file, a host control panel and two plugins are impossible to check for chains, because no one screen shows the whole graph. One list, sorted by source, is where chains become visible.
How to add redirects in WordPress
With a redirection manager plugin
Most modern SEO plugins include a redirection manager, and the workflow is broadly the same in each. Taking Hydrogen SEO's as the example (disclosure again: our sister product, and Beta software), the steps are:
- In wp-admin go to Hydrogen SEO → Redirections and click Add Redirect.
- Enter the source as a path, not a full URL:
/old-post/, neverhttps://example.com/old-post/. The rule applies to your own site's URLs only. - Enter the target as a relative path (
/new-post/) to stay on the site or an absolute URL to send visitors to another domain. - Choose 301 (Permanent) or 302 (Temporary) and save. The redirect takes effect immediately; confirm it in a private browser window.
The redirection manager documentation adds two rules worth adopting whatever tool you use: one hop, never a chain, and no loops. A useful pattern is to create a rule as a 302 while you confirm the destination is right, then edit it to a 301 once you are certain. Because the redirect is issued before WordPress renders a page, it works alongside page caching and host-level caches; if a brand-new rule does not fire, clear the cache once. Every rule is visible in one list with its source, target and type, which is the property that makes chain-hunting possible.
With .htaccess or Nginx, for advanced users
If you administer your own server and prefer redirects at the web-server layer, the equivalents are a Redirect 301 /old-post/ /new-post/ line in Apache's .htaccess, or a return 301 /new-post/; inside a location = /old-post/ block in Nginx. Server-level rules fire before PHP starts, so they are marginally faster, but they carry three costs: a syntax error in .htaccess takes the whole site down, managed hosts often do not allow edits at all, and the rules live in a file only one person on the team knows about. For a handful of high-traffic migration redirects on a server you control, the web-server layer is fine. For the living list a content site accumulates, keep them where the whole team can see them.
When you change permalinks or delete a post
Most 404s on WordPress sites trace back to two ordinary editorial actions, and a rule for each prevents the majority of them.
- When you rename a slug, add the 301 in the same sitting. WordPress does not reliably leave a redirect behind when a permalink changes, and every existing link to the old slug breaks the moment you save. Treat the redirect as part of the rename, not a follow-up.
- When you delete a post, decide its fate as part of deleting it. Either it 301s to the page that best replaces it, or it 404s deliberately, and you write down which. A trashed post with backlinks and no decision is a slow leak.
- When you change the whole permalink structure or migrate domains, build the map before launch. Export every current URL, pull the top pages from analytics and Search Console so you know which carry value, map each old URL one-to-one to its most relevant new URL, and stage the redirects to go live with the new site rather than days later. Then update your XML sitemap to list only final, live URLs and resubmit it; our WordPress XML sitemap guide covers what belongs in it.
- Fix internal links at the source, not just with a redirect. A redirect is a patch; a corrected link is the repair. When a site audit shows a broken internal link, edit the linking page so it points at the final URL directly. Do both when the broken URL also has external links.
Keep migration redirects in place for the long term. Google has recommended at least a year; in practice, if the old URL has backlinks, the rule costs nothing to keep and something to remove.
When should you not redirect?
A redirect is not always the answer, and the reflex to redirect everything creates its own problems.
- Unrelated content. If nothing on the site replaces the dead page, do not redirect it to the homepage or a vaguely related category. Google typically treats blanket redirects to irrelevant pages as soft 404s, so you gain nothing, and the visitor loses. Return a 404, or a 410 Gone to signal the removal was deliberate. Search engines may drop 410 URLs slightly faster; for most sites the practical difference is small.
- Content deleted by accident that still ranks. Restore it. A redirect passes some value to a different page; the original ranking page usually recovers far more by simply existing again.
- A URL that never existed. An inbound typo from another site is worth redirecting to the page the linker clearly meant, but only once the log shows it receiving real hits. Do not pre-emptively build rules for every misspelling you can imagine.
Monthly redirect hygiene checklist
Redirect health fails when nobody owns it. A short pass each month keeps the list honest and takes minutes once the habit exists.
- Open Search Console's 404 report and check for new URLs that carry links or traffic. Add single-hop 301s for those; leave the rest.
- Re-run your broken internal link audit and fix each result at the source page, adding a redirect only where the URL also has external links.
- Scan the redirect list for chains: any target that also appears as a source. Flatten them.
- Promote 302s that have turned out to be permanent into 301s. If it has been temporary for twelve months, it is not temporary.
- Delete rules whose sources no longer receive any traffic or links, once they have done their job for a long while. Hundreds of stale rules are a maintenance burden with no return.
- Confirm your XML sitemap contains only live, final URLs and no redirecting ones.
Redirects sit in the crawlability section of our 25-point WordPress SEO checklist for 2026, and the plugins we compare in the best WordPress SEO plugins in 2026 differ in whether a redirection manager ships in the free tier at all. If you are moving between SEO plugins, the Sheesh Labs guide to switching from Rank Math or Yoast to Hydrogen SEO covers how existing redirect rules are imported, dry-run and undone. The broader argument for getting this right, including a full migration checklist, is in the Hydrogen SEO team's complete guide to 301 and 302 redirects, and what the plugin itself does is summarised on our Hydrogen SEO page.
Frequently asked questions
Should I use a 301 or a 302 redirect in WordPress?
Use a 301 when the URL has moved permanently: a renamed slug, two posts merged into one, a domain or HTTPS migration, a discontinued product with a close replacement. Use a 302 only when the original URL is coming back: an out-of-stock product, a seasonal page parked off-season, an A/B test or a maintenance detour. If a 302 has been in place for a year, it is permanent, so change it to a 301.
Do 404 errors hurt SEO?
A 404 on a URL that never mattered is harmless and every healthy site has some. The damage comes from 404s on URLs that carry backlinks, internal links or traffic: the value those links conferred stops flowing anywhere, crawlers spend budget on dead ends, and visitors who land on Not Found rarely try a second URL. Fix the 404s that matter and do not chase a zero-404 vanity metric.
What is a redirect chain and why is it bad?
A redirect chain is a redirect that points at another redirect, so a visitor goes A to B to C before reaching a page. Chains build up naturally as a site ages through slug changes, restructures and HTTPS migrations. Each hop adds latency, crawlers follow only a limited number of hops before giving up, and signals pass less cleanly through several hops than through one. The fix is to point A and B directly at C.
How do I find all the 404 errors on my WordPress site?
Use three sources. Google Search Console under Indexing, then Pages, lists URLs Google itself crawled and found missing, and Links shows top linked pages that may now 404. A site audit such as the one in the free Hydrogen SEO plugin finds broken internal links across your own content. Your host's access logs or analytics platform surface 404 hits from real traffic, including inbound typos neither of the others would catch.
Should I redirect deleted pages to my homepage?
No. Google typically treats mass redirects to an unrelated page as soft 404s, so you gain nothing, and visitors who followed a specific link end up at your front door without the content they wanted. Redirect each dead URL to the most relevant live replacement. If nothing on the site replaces it, let it return an honest 404, or a 410 to signal the removal was deliberate.
Do I need to edit .htaccess to add redirects in WordPress?
Not any more. A redirection manager inside WordPress, such as the one in Hydrogen SEO, lets you enter a source path, a target URL and a 301 or 302 type from wp-admin, and serves the redirect before WordPress renders a page. It works identically on Apache, Nginx, LiteSpeed and managed hosts where you cannot touch server files, and every rule is visible in one list where chains and loops are easy to spot.