Check & monitor · Redirect checks
301 Redirect SEO: HTTP 301 vs 302 Status Codes and Which One Google Uses to Move Your Indexed URL
Redirects are the one piece of technical SEO where the work looks finished the moment it is done. You change a rule, you load the old URL, the browser lands on the new one, and the ticket gets closed. Weeks later someone notices that Google is still showing the old address, or that the new page never appeared in the index at all, and by then nobody remembers which of the four hundred redirects was the wrong kind.
Submit · monitor coverage · official methods only
Ready to check coverage
Paste a sitemap to sweep every URL for index status, then submit the missing ones through the official Google Indexing API and Bing IndexNow.
Coverage
indexed
Avg time to index
URLs submitted
Now eligible
Live, interactive · sample data · official methods only
Official Google Indexing API · Bing IndexNow · verified sitemaps · no spam, no PBNs
In short
A 301 redirect tells Google a URL has moved permanently. Google's redirect documentation says the indexing pipeline "uses the redirect as a signal that the redirect target should be canonical", so search results switch to the new URL. A temporary redirect (302, 303 or 307) does the opposite: "Googlebot follows the redirect, but the indexing pipeline doesn't use the redirect as a signal that the redirect target should be canonical", and results keep showing the old page. That one difference is the whole of 301 vs 302 for SEO. Nothing else about the redirect, not the .htaccess syntax, not the plugin, not the CDN rule, changes which URL ends up in the index. The step teams skip is verification: a 301 that returns cleanly in your browser proves the instruction exists, not that Google recrawled the old URL, followed it, and indexed the target.
Last updated August 2026
The gap is that a redirect is an instruction to a crawler, not an event. Google has to recrawl the old URL to see it, follow it, decide whether the target deserves to be canonical, and index that target. Each of those is a separate thing that can not happen. A 302 where you meant a 301 gets followed and then ignored for canonicalization. A chain of three hops burns crawl budget and drops signals. A target that carries a noindex or a canonical pointing back at the old URL cancels the move entirely, and every one of those cases returns a perfectly healthy redirect in curl.
This page covers what each redirect status code does to your index, when to use which, how long to keep them, and the mistakes that quietly cost coverage. Indexing handles the part you cannot see from the server side. Load your old and new URLs together and you get the real index status of both sets: which old URLs Google still holds, which new URLs it has picked up, and a plain-English reason for the ones it is refusing. Pages that qualify get resubmitted through the official Google Indexing API, IndexNow and your sitemaps. We do not claim to force Google to index anything, because Google makes that call.
Official methods only
White hat · no spam, no PBNs
Why it works
What your team gets with redirect checks
Every redirect target, checked for real
A redirect that resolves in a browser says nothing about the index. We check the target URLs themselves and tell you which ones Google actually kept.
The reason a move stalled, not a guess
New URLs Google is refusing come back with the cause, whether that is a chain, a canonical still naming the old URL, or a noindex nobody removed.
Resubmitted through official channels
Redirect targets that qualify get pushed out through the Google Indexing API, IndexNow and sitemaps. No link blasts and no promises Google has not made.
What it handles
Submitted, monitored and fixed, automatically
Indexing submits your URLs through the official Google Indexing API, Bing IndexNow and clean XML sitemaps, watches coverage across both engines, and flags any page that drops out with a plain-English reason so you can resubmit and get it back.
- Confirms which redirect targets Google has actually indexed, not just which redirects resolve
- Watches old URLs leave the index so you can tell a normal move from a broken one
- Catches canonicals and noindex tags on the target that cancel the redirect
- Flags redirect chains and loops that stop a move from completing
- Resubmits qualifying targets through the official APIs and sitemaps
- Tracks time to index so you can prove the redirect worked
Not indexed yet
/blog/seo-guide-2026 is discovered but not indexed
thin content signal, queued for re-crawl via the Indexing API
Why Indexing
One place to submit, monitor and fix coverage
Not a black-hat indexer that risks your site, not a free checker that only tells you the bad news. Indexing unifies official submission and live coverage monitoring, the white-hat way, across Google and Bing.
Submits the official way
Bulk-submit through the Google Indexing API, Bing IndexNow and clean XML sitemaps. We speed discovery and re-crawl using methods the engines support, never spam, PBNs or black-hat tricks.
Monitors coverage live
You do not refresh a search bar one URL at a time. Indexing watches which pages are in Google and Bing, catches anything that drops out, and tracks time-to-index across your whole site.
Diagnoses and resubmits
Every non-indexed page comes with a plain-English reason, then auto-resubmits through the official API so it gets another shot. Google still decides, but nothing waits in the dark.
At a glance
301 vs 302 vs 307 vs 308: what each redirect does to your index
Google groups redirects into permanent and temporary, and the group decides which URL appears in search results. Everything in this table is from Google's own redirect documentation.
| Redirect method | Status code | Google treats it as | URL shown in search results | Use it when |
|---|---|---|---|---|
| Moved permanently | 301 | Permanent | The redirect target (the new URL) | The move is not going to be reverted. This is the default for migrations, consolidations and retired pages. |
| Moved permanently | 308 | Permanent | The redirect target (the new URL) | Same as 301, but the request method and body are preserved. Useful for POST endpoints. Google treats it identically to 301. |
| Found | 302 | Temporary | The source page (the old URL) | The original URL really is coming back, such as a page out for maintenance or a seasonal variant. |
| See other | 303 | Temporary | The source page (the old URL) | After a form submission, to stop a refresh from resubmitting. Rarely a deliberate SEO choice. |
| Temporary redirect | 307 | Temporary | The source page (the old URL) | A genuinely short-lived move where the method must be preserved. Also what browsers apply internally for HSTS. |
| Instant meta refresh | None (HTML tag) | Permanent | The redirect target | Only when you cannot set a server-side redirect. Google says it interprets instant meta refresh redirects as permanent. |
| Delayed meta refresh | None (HTML tag) | Temporary | The source page | Avoid for moves. Google interprets a delayed meta refresh as a temporary redirect, so the old URL stays. |
| JavaScript redirect | None (client side) | Depends on rendering | Unreliable | Last resort. Google says to use these "only if you can't do server-side or meta refresh redirects", because rendering can fail and Google may never see it. |
What is a 301 redirect?
A 301 redirect is an HTTP response that tells any client asking for one URL to go to a different one instead, and that the change is permanent. The server answers with the status code 301 and a Location header naming the new address. Browsers follow it silently, which is why users never notice, and crawlers follow it too, which is the part that matters for search.
The word permanent is doing real work here. It is not a description of how long the rule will sit in your config file. It is a declaration to Google about how it should treat the two URLs from now on. Google's documentation is direct about the consequence: for permanent redirects, "the indexing pipeline uses the redirect as a signal that the redirect target should be canonical". Canonical means the version Google picks to index and to show. So a 301 is a request to retire one URL and promote another in its place.
That is also why a 301 is not reversible in any clean way. You can delete the rule, and Google will eventually recrawl and work out that the old URL is live again, but you have spent weeks telling it the opposite. Google says to "use permanent redirects when you're sure that the redirect won't be reverted". If there is any real chance the old URL comes back, a permanent redirect is the wrong tool, and that is the entire case for the temporary codes.
301 vs 302: which redirect should you use?
Use a 301 for anything permanent and a 302 only when the original URL is genuinely coming back. The difference is not about strength or speed. Both get followed. The difference is what the indexing pipeline does afterwards.
Google spells out both halves. For permanent redirects: "Googlebot follows the redirect, and the indexing pipeline uses the redirect as a signal that the redirect target should be canonical." For temporary redirects: "Googlebot follows the redirect, but the indexing pipeline doesn't use the redirect as a signal that the redirect target should be canonical." The practical result is that a permanent redirect shows the new URL in search results and a temporary one keeps showing the old one.
This is why a 302 on a migration is such an expensive mistake. Everything appears to work. Users reach the new page, analytics fills up, the redirect returns a valid response. But Google keeps the old URL in the index, keeps sending traffic to an address you intended to retire, and never transfers the canonical status you were trying to move. Teams often discover it months later while investigating why the new URLs will not rank, and the answer is that Google was never asked to rank them.
The reverse mistake is rarer but real. Firing a 301 at a page that is out of stock for three weeks, or a landing page paused between campaigns, hands away a URL you wanted to keep. When the page comes back, you are waiting on a recrawl to undo something that a 302 would have avoided entirely.
- Permanent (use 301 or 308): domain change, replatform, HTTP to HTTPS, www to non-www, merging duplicate pages, retiring a URL that has a clear replacement.
- Temporary (use 302, 303 or 307): maintenance pages, geo or device variants that will revert, A/B tests, out of stock products that are coming back, short campaign redirects.
- Neither: a page with no meaningful equivalent. A clean 404 or 410 is more honest than dumping it on the homepage, and Google treats a 404 as a strong signal not to crawl that URL again.
Does a 301 redirect pass link juice?
Yes. Google has said publicly and repeatedly that redirects do not cost PageRank. The clearest version came from Gary Illyes of Google in July 2016, stating that 30x redirects do not lose PageRank anymore, and John Mueller had said the same thing earlier that year. The older belief that a 301 costs you a percentage of link equity comes from guidance that Google itself has since retired, and it has not been true for a long time.
What that does not mean is that a redirect makes the target rank like the source. Signals move, but so does relevance. If you 301 a page about commercial roofing quotes into a generic services page, Google now has a target that matches the original queries much less well. The links point somewhere, and the rankings still fall, and people read that as PageRank loss when the actual loss is topical fit. The rule that holds up in practice is to redirect to the closest genuine equivalent, one page at a time, and accept a 404 where no equivalent exists.
The other real cost is time. Signals do not transfer at the moment you deploy the rule. They transfer as Google recrawls each old URL, sees the redirect, and processes it. On a large site that is weeks of partial state where some pages have moved and others have not, which is exactly what a temporary ranking dip during a migration looks like from the outside.
How long does a 301 redirect take to work, and how long should you keep it?
The redirect works instantly for humans and takes weeks for Google, because Google has to recrawl the old URL to find out about it. Google's guidance on site moves puts a number on the aggregate: "as a general rule, a medium-sized website can take a few weeks for most pages to move in our index; larger sites can take longer". There is no way to speed this up per URL beyond the usual crawl signals, and no service can force it.
Because the work is per URL, progress is uneven in a way that alarms people. Your most crawled pages move within days. A product page Googlebot visits every six weeks moves in six weeks. During that window the index genuinely contains a mixture of old and new URLs, and reporting that shows both is accurate rather than broken.
On retention, Google is unambiguous: "keep the redirects for as long as possible, generally at least 1 year". That is deliberately longer than most teams plan for, and it is longer than the 180 days the Change of Address tool forwards signals for after a domain change. The trap is reading 180 days as the length of the migration, retiring the old domain at six or seven months, and taking down redirects Google is still using. Renew the old domain past the redirect window, and treat the rules as permanent infrastructure. There is no upside to removing them.
How to set up a 301 redirect
Server-side is the only method worth planning around. Google orders redirect types by how reliably it can interpret them and puts server-side redirects at the top, noting that "a server side redirect has the highest chance of being interpreted correctly by Google". Everything else on the list is a fallback for when you do not control the server.
Wherever you implement it, redirect to a specific target, not to a category or the homepage, and redirect to the final URL rather than to something that redirects again. Both of those sound obvious and both are where large redirect maps go wrong, usually because a bulk rule was written with a wildcard that was easier than the mapping work.
- Apache (.htaccess): Redirect 301 /old-page /new-page, or RewriteRule with the R=301 flag for pattern matching. Confirm mod_rewrite is enabled and that no earlier rule matches first.
- Nginx: return 301 https://example.com/new-page; inside a location block. Use return rather than rewrite where you can, because it is faster and clearer to read.
- WordPress: a redirect plugin writes rules into the database and applies them in PHP. That works, but every request pays for it, so move high-volume rules into the server config once the map settles.
- Cloudflare and other CDNs: bulk redirects and redirect rules run at the edge before the request reaches your origin. Fast, and easy to forget about, so document them where whoever debugs this next will look.
- Next.js, Rails, Laravel and similar frameworks: a redirects config or route-level permanent redirect. Keep the map in version control so a deploy cannot silently drop it, which is one of the most common ways redirects disappear.
Redirect chains, loops, and the 10 hop limit
A redirect chain is an old URL that points at another URL that points at a third. They accumulate honestly: a restructure in 2023, a domain change in 2025, and suddenly the original address takes three hops to arrive. Google does follow chains, and it publishes the limit: "by default, Google's crawlers follow up to 10 redirect hops". So a two hop chain is not fatal.
It is still worth flattening, for two reasons that have nothing to do with the hop limit. Each hop is a request Googlebot has to spend, which matters on large sites where crawl capacity is the constraint. And each hop is another rule that a future config change can break, at which point the whole chain fails and you lose the original URL rather than one hop of it. Point every old URL at its final destination directly and the chain stops being a dependency.
A redirect loop, where A points to B and B points back to A, is a hard failure. Browsers report it as too many redirects and crawlers give up. Loops are usually accidental collisions between rules written at different times, most often a trailing slash rule fighting a canonical hostname rule, or a CDN edge rule and an origin rule each trying to enforce HTTPS. Test the actual response chain rather than the config, because the config rarely shows you the interaction.
How to check whether Google actually moved to the new URL
Verifying a redirect and verifying a move are different jobs. curl or a browser tells you the server is answering correctly. It cannot tell you whether Google recrawled the old URL, followed the redirect, accepted the target as canonical, and indexed it. Those four things happen inside Google, days or weeks after your deploy, and every one of them can fail while your redirect stays perfectly healthy.
In Search Console, an old URL that has been processed correctly shows up under the Page with redirect status, which means Google has seen the redirect and is no longer indexing that address. That is the outcome you want on the source side. On the target side you want the new URL indexed. Checking one without the other is how half-finished moves get signed off. Bear in mind the Page indexing report caps its example lists: Google states that "the list of example URLs in the report is limited to 1,000 items, and isn't guaranteed to show all URLs in a given status, even when less than 1,000 items".
That cap is why redirect maps of any size need a bulk check instead. Load both URL lists into Indexing and you get the status of each side together: old URLs still held in the index, new URLs picked up, and a named reason for the ones being refused, which in redirect work is nearly always a canonical still pointing at the old address, a noindex that shipped with the new template, or a chain that never got flattened. Targets that qualify get resubmitted through the official Google Indexing API, IndexNow and your sitemaps, and time to index is tracked so you can show the fix landed.
Keep reading
- Page With Redirect in Search Console: Error or Expected? Google says a redirecting URL will not be indexed, and that is the system working. What the status means, the five cases where it hides a real problem, and how to find redirect chains.
- 301 Redirect Not Working? 9 Causes and How to Fix Each A 301 redirect that is not working is usually cache, a rule matching first, or Google simply not having recrawled yet. Nine causes, in the order worth checking.
- Changing Domain Name SEO: Does It Hurt Rankings? Changing your domain name costs a temporary dip, not your rankings, if the redirects are right. What Google documents, and the 180 day trap that catches teams.
Good questions
Questions about redirect checks
Explore more
More ways teams get every page indexed
Googlebot crawler guide
The crawler that decides what Google ever gets to index, and how to tell the real one from the fakes in your logs.
Learn moreNoindex tag checker
One line of HTML can keep a page out of Google forever. Find every copy of it before it costs you a quarter.
Learn morellms.txt and AI crawler access
Half the SEO industry shipped an llms.txt this year. No major AI engine has committed to reading it. Here is the real spec, and the thing that actually decides whether AI answers cite you.
Learn moreStop guessing. Get every page indexed and keep it that way.
Bulk-submit your URLs through the official Google and Bing channels, monitor coverage, and resubmit anything that drops out, automatically. White hat only, so we speed discovery without ever guaranteeing what Google chooses to index.
Google Indexing API · Bing IndexNow · sitemaps · coverage monitoring · official methods only