Your shopping cart is empty!
A 301 redirect signals a permanent URL move: Google transfers PageRank and updates its index. A 302 is temporary: Google keeps both URLs indexed. Choosing the wrong one costs rankings. This guide covers the full difference, real-world use cases, server configuration, and a step-by-step audit checklist.
Contents
What is an HTTP redirect and how it works
When a browser or search crawler requests a URL, the server responds with an HTTP status code. 3xx codes mean "this resource has moved" and specify the new location. The browser follows automatically, and Googlebot records the change in its index.
The sequence looks like this:
- Request to
https://example.com/old-page - Server returns
301 Moved Permanently+ the headerLocation: https://example.com/new-page - Browser follows to the new URL without user action
- Googlebot marks the old URL as moved and transfers ranking signals to the new one
The key distinction between redirect codes is how permanent the move is and whether ranking signals should pass to the destination URL.
301 vs 302: comparison table
On the surface, both codes move users to a different URL. But from a search engine perspective they behave very differently.
| Parameter | 301 Moved Permanently | 302 Found (temporary) |
|---|---|---|
| Type of move | Permanent | Temporary |
| PageRank transfer | Yes, nearly full | No, or only partial |
| Browser caching | Cached — hard to reverse | Usually not cached |
| Google's behaviour | Replaces old URL with new in index | Keeps old URL in index |
| HTTP method | May convert POST to GET | May convert POST to GET |
| Typical use cases | Site migration, URL change, HTTP to HTTPS | A/B tests, temporary campaigns, maintenance |
Other redirects: 303, 307, 308
Most SEO work comes down to 301 and 302, but the HTTP specification includes a few additional codes worth understanding:
| Code | Name | HTTP method | Use case |
|---|---|---|---|
| 301 | Moved Permanently | May change POST to GET | Permanent URL relocation |
| 302 | Found | May change POST to GET | Temporary redirect |
| 303 | See Other | Always GET | After form submissions / payments — prevents repeated POST |
| 307 | Temporary Redirect | Preserves method | Temporary, keeps POST as POST |
| 308 | Permanent Redirect | Preserves method | Permanent, keeps POST as POST |
For SEO purposes, 307 and 308 are rarely needed. Code 303 is relevant in web development after form submissions. In 90% of SEO scenarios, choosing between 301 and 302 is sufficient.
How redirects affect SEO
Redirects touch three key SEO parameters: crawl budget, PageRank flow, and page load speed.
Redirect chains — the biggest problem
A chain occurs when URL A → URL B → URL C. Googlebot spends additional resources on each hop. From our audit work: sites with chains of 4–5 redirects consistently show incomplete indexation — the bot simply runs out of crawl budget before reaching the final destination.
PageRank and link juice
Google officially confirms that 301 redirects pass PageRank. The legacy belief — that 15% of link equity was lost per redirect — was addressed by John Mueller in 2016: losses are minimal for a single, direct 301. Chains, however, still cause measurable dilution.
Crawl budget and indexation speed
For small sites under 1,000 pages, crawl budget is rarely a concern. For e-commerce sites with tens of thousands of URLs, every wasted redirect hop means fewer pages crawled per day. If 1,500 of your 5,000 product pages sit behind chains, a significant portion of your catalogue may go unindexed for weeks at a time.
Along with redirects, it's important to correctly configure canonical tags — they help avoid content duplication without physical redirection.
When to use 301
A 301 is the right choice in 90% of URL relocation scenarios. Specific cases:
- HTTP to HTTPS migration — the most common case. Every HTTP request must redirect to HTTPS via 301.
- URL structure change — you renamed
/catalog/product-name-12345to/product-name/. The old URL gets a 301 to the new one. - Duplicate URL consolidation — both
www.and non-www versions are live. One must 301 to the other. - Deleting a page that had content — if similar content exists elsewhere on the site, 301 to the most relevant page.
- Domain migration — moving from
old-domain.comtonew-domain.com. All URLs must be covered at the server level, not just the homepage. - Trailing slash normalisation —
/page/→/page(or vice versa) via 301 to eliminate duplicates.
When to use 302
A 302 is for situations where the original URL will genuinely return. It is used sparingly but correctly:
- A/B testing — you are testing a new page variant. Traffic temporarily goes to variant B via 302, so Google does not replace version A in its index.
- Temporary promotions — a campaign landing page (
/sale/) briefly points to a specific deal. After the campaign,/sale/reverts. - Geo-redirects — some geo-targeting setups use 302 so Google retains the original URL in its global index.
- Maintenance mode — the site is down for scheduled maintenance and users are temporarily sent to a holding page via 302.
From our agency experience: the most common mistake is developers defaulting to 302 because they "don't want to break anything permanently." A year later the site is full of temporary redirects on URLs that moved long ago. The outcome — Google keeps indexing outdated addresses, and the new pages never build proper PageRank.
How to configure redirects
Apache (.htaccess)
# Single 301 redirect
Redirect 301 /old-page https://example.com/new-page
# All HTTP -> HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# www -> non-www
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
Nginx
# HTTP -> HTTPS
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
# Single URL
location = /old-page {
return 301 https://example.com/new-page;
}
WordPress
For bulk redirects in WordPress, use the Redirection plugin (2M+ active installs). It stores all rules in the database and includes built-in 404 monitoring. For one-off redirects, editing .htaccess directly is also reliable.
OpenCart
OpenCart handles redirects through the admin panel under System → SEO URL. For edge cases, edit .htaccess in the site root. Note: OpenCart automatically generates a 301 when you change a product's SEO URL — always verify that the old URL is no longer active after the update.
How to check redirects
Redirect verification is a mandatory step after any URL structure change or site migration. Here is the toolset, from quickest to most thorough:
1. Curl (command line)
# Follow the full redirect chain curl -I -L https://example.com/old-page # What to look for in the output: # HTTP/1.1 301 Moved Permanently # Location: https://example.com/new-page # HTTP/2 200 <- final response
The -I flag prints headers only; -L follows all redirects. Three HTTP status lines in the output means you have a two-hop chain.
2. Screaming Frog SEO Spider
- Run a crawl of your domain
- Go to Response Codes → Redirection (3xx)
- For chains: Bulk Export → Redirect Chains
- Sort by Redirect Hops — any value >1 needs fixing
3. Ahrefs Site Audit
- Run a new audit or refresh an existing one
- Go to Issues → All Issues
- Filter by Redirect loop, Too many redirects, Redirect chain too long
- Review all redirect targets under Links → Redirects
4. Online checkers
- httpstatus.io — shows the full redirect chain with response time at each hop
- redirect-checker.org — simple interface for spot-checking individual URLs
- Google Search Console → URL Inspection — shows which URL Google treats as canonical after all redirects resolve
Case study: 3-hop redirect chain and 40% traffic loss
A building materials e-commerce client came to us after losing 38% of organic traffic in two months following a CMS migration. No manual penalties, no content changes. The culprit was entirely in the redirect configuration.
State before the audit:
- Old site on HTTP → 301 to HTTPS (old domain)
- Old domain HTTPS → 302 to new domain (the developer set it as "temporary" during testing)
- New domain root / → 301 to /en/ (language version)
Total: 3 hops for every URL on the site. Googlebot was only crawling a fraction of the catalogue. The 302 in the middle meant PageRank from 4,000+ inbound links was not flowing to the new domain.
What we did:
- Collapsed the chain into a single direct 301 from
http://old-domain.com/*tohttps://new-domain.com/en/* - Verified with Screaming Frog — zero chains remaining
- Submitted key pages for recrawling via Google Search Console
Result: traffic recovered to 94% of the pre-migration baseline within 6 weeks. The remaining 6% resolved naturally over the following 3 months as Google fully processed the domain change.
In Practice
An online coding school based in Kharkiv came to us after a full platform redesign. Their development team restructured URLs across all 800 course pages but left the intermediate redirect steps in place after the migration completed. Every course page had a chain of 4 to 6 hops — for example /courses/python-v1 → /courses/python-v2 → /courses/python-v3 → /learn/python.
Within 3 weeks Google Search Console showed rankings for 60 target keywords dropping 12–20 positions, and overall organic traffic fell 41%. The problem only surfaced when course enrollment enquiries dropped noticeably.
We ran a full crawl in Screaming Frog using Bulk Export → Redirect Chains: it returned 800 chains with an average depth of 4.7 hops. Ahrefs Site Audit confirmed that link equity was diluting at every step — effective PageRank transfer through those chains was no more than 60% of the original link weight.
All chains were collapsed to single direct 301s via Nginx rewrite rules, and priority pages were submitted for recrawling through Google Search Console. Traffic recovered within 5 weeks; rankings for 54 of the 60 affected queries returned to their pre-redesign positions.
Chains of 4 or more hops on course pages do not just bleed PageRank — on sites this size Googlebot frequently ran out of crawl budget before reaching the final URL. We saw pages stuck in "Discovered — currently not indexed" status three weeks after launch. Collapse redirect chains before deploying, not after the traffic complaints arrive.
Frequently asked questions
Does a 301 redirect pass full PageRank?
Google officially confirmed that 301 passes the vast majority of PageRank. The old belief was that up to 15% was lost per redirect, but John Mueller clarified in 2016 that losses are minimal for a single direct 301. In practice, rankings typically recover within 2–8 weeks after a properly implemented 301.
What happens if I use 302 instead of 301 for a permanent move?
Google will likely keep both the old and new URLs in its index and may not fully transfer PageRank to the destination. If the original page is gone permanently but returns a 302, Google waits for the old URL to come back and does not update the index — directly harming rankings for the new page.
How many redirects in a chain are bad for SEO?
A chain of 3 or more redirects significantly slows crawling and may cause Googlebot to abandon the chain before reaching the final URL. The ideal is a single direct redirect from A to B. A maximum of two hops (A to B to C) is acceptable only as a transitional state during migration.
How do I check a redirect without any tools?
Use the command line: curl -I -L https://example.com/old-page. The -I flag shows response headers only, while -L follows the redirect chain. Look for HTTP status lines (301, 302) and the Location header — this reveals exactly where each redirect goes and whether any unnecessary hops exist.
Need a redirect audit for your site?
We will run a free technical SEO audit: identify chain redirects, incorrect redirect types, and indexation issues. You get a prioritised list of fixes, not a generic report.


