Page with Redirect and Redirect Error: What They Mean and How to Fix Them
Page with redirect and Redirect error both appear in the Search Console Page indexing report, and both involve redirects, but they mean very different things. Page with redirect says the URL sends visitors somewhere else, so Google indexes the destination instead. For old addresses, http to https moves and www changes that is the correct outcome. Redirect error says Google tried to follow a redirect and could not reach a working page, because the chain was too long, looped back on itself, produced an overlong URL or contained a bad address. That always needs fixing. This guide shows you how to tell the two apart, how to trace every hop with curl, how to collapse chains into a single 301, how to break loops on WordPress, Cloudflare, Apache and nginx, and how to confirm the fix.
Two statuses, two meanings
| Page with redirect | Redirect error | |
|---|---|---|
| What Google saw | The URL redirects to another URL | A redirect Google could not follow to a working page |
| What gets indexed | The destination, if it is indexable | Nothing from this chain |
| Is it a problem? | Usually not | Always |
| Typical URLs | Old slugs, http, non-www, trailing slash variants | Loops, long chains, broken targets |
| What to do | Update links and sitemaps that still use the old URL | Trace the chain and fix it |
Page with redirect
Google crawled the URL, received a redirect and did not index this address, because the content lives at the destination. That is how redirects are meant to work. After a migration, a change of domain or a move to https, you should expect a large number of URLs here, and the count fades slowly as Google stops revisiting them.
Redirect error
Google's documentation lists four causes: a redirect chain that was too long, a redirect loop, a redirect URL that eventually exceeded the maximum URL length, and a bad or empty URL in the redirect chain. Googlebot follows up to ten redirect hops; if it has not reached content by then, the URL is reported as an error. In practice most errors are loops, often between http and https or between www and non-www, and a browser shows them as ERR_TOO_MANY_REDIRECTS.
For other reasons in the same report, see Search Console errors explained.
When page with redirect does need attention
Page with redirect is a report, not an error, but a few situations deserve a closer look:
- A page you want indexed is listed. If your live service page appears here, it is redirecting when it should not. Check the trailing slash, the host and any plugin redirect rules.
- The count keeps rising long after a migration. Something on your site is still linking to old URLs: the menu, footer, in-content links, canonical tags, hreflang or the sitemap.
- The sitemap lists redirecting URLs. Search Console shows sitemap filters in the report. A sitemap should list only final addresses that return 200.
- Redirects go to the wrong place. Many old URLs pointing to the home page are often treated as soft 404s, and Google drops them anyway.
Crawl your site with our redirect checker or any crawler and list internal links that hit a redirect. Replace each one with the final URL. Visitors arrive faster and Google stops rediscovering the old addresses. The migration redirects guide covers mapping old URLs to new ones after a site move.
How to trace a redirect chain
Use curl rather than a browser. Browsers cache 301 redirects, so after you fix a rule your own browser can keep showing the old behaviour. This command prints the status line and destination of every hop:
curl -sIL http://example.com/old-page | grep -iE '^(HTTP|location)'
A healthy result has one redirect and then a 200:
HTTP/1.1 301 Moved Permanently
location: https://www.example.com/new-page/
HTTP/2 200
A chain looks like this, with four hops before the page is reached:
HTTP/1.1 301 Moved Permanently
location: https://example.com/old-page
HTTP/2 301
location: https://www.example.com/old-page
HTTP/2 301
location: https://www.example.com/old-page/
HTTP/2 301
location: https://www.example.com/new-page/
HTTP/2 200
To count the hops and see the final address in one line:
curl -sL -o /dev/null -w '%{num_redirects} hops, final %{http_code} %{url_effective}\n' http://example.com/old-page
A loop makes curl stop with an error such as Maximum (30) redirects followed. Add --max-redirs 10 to match Googlebot's limit. In the output, look for the same two URLs alternating; that pair shows you which two rules disagree.
Remember that redirects can also be made with a meta refresh or JavaScript. If curl shows a 200 but the browser moves to another page, view the source and search for http-equiv="refresh" or window.location. Server-side 301s are clearer for Google and should be used wherever you can.
Common causes of redirect errors
| Cause | What curl shows | Fix |
|---|---|---|
| Cloudflare Flexible SSL with an origin that forces https | https redirecting to the same https URL forever | Set SSL mode to Full (strict) |
| WordPress site address on http while the server forces https | http and https alternating | Set both addresses to https |
| www rule and non-www rule in different places | www and non-www alternating | Choose one host and remove the other rule |
| Trailing slash rules that disagree | /page and /page/ alternating | One slash policy, applied once |
| Rules stacked across server, plugin and CDN | Three or more hops | Keep each redirect in one place |
| Old redirects pointing at URLs that now redirect | A chain that grows after each migration | Point old rules straight at the final URL |
| Rule that appends to the path | URL growing longer at each hop | Anchor the pattern so it matches once |
| Redirect to an empty or malformed location | A location: header that is blank or relative to the wrong path | Use full absolute URLs |
Each of these has a dedicated guide: redirect loops, redirect chains and https redirects.
One-hop rules by platform
The goal is that any old variant reaches the final https address in a single 301.
nginx
server {
listen 80;
server_name example.com www.example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
Put page-level moves in the main server block as location = /old-page { return 301 https://www.example.com/new-page/; }, then run sudo nginx -t and reload.
Apache and .htaccess
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.example.com%{REQUEST_URI} [L,R=301]
Redirect 301 /old-page https://www.example.com/new-page/
Place host and protocol rules before other rewrites, and list specific page redirects with the final address, not an intermediate one. More detail is in the Apache redirects guide.
WordPress
Under Settings, then General, both the WordPress Address and Site Address must use the same https host as your server rules. If you use a redirect plugin, keep page moves there and host rules on the server, not both.
Cloudflare and Plesk
In Cloudflare, use SSL mode Full (strict) and check Redirect Rules and Page Rules for duplicates of server rules. In Plesk, the hosting settings include a preferred domain option and a permanent https redirect; if you use those, remove matching rules from .htaccess. The Cloudflare redirects guide and Plesk redirects guide go into each panel.
A worked example
A consultancy moved to https, then to www, then renamed a section. Search Console shows 31 redirect errors and 400 pages with redirect. Running curl on one error URL shows it bouncing between https://example.com/insights/ and https://www.example.com/insights/: an .htaccess rule sends non-www to www, while a Cloudflare Redirect Rule left from an earlier test sends www back to non-www.
The Cloudflare rule is deleted. Next, an older URL is traced: http://example.com/blog/pricing goes to https, then to www, then adds a slash, then moves to /insights/pricing/, which is four hops. The page redirect is rewritten to send /blog/pricing straight to https://www.example.com/insights/pricing/, and the host and protocol rules are merged into one. Every old URL now resolves in one hop.
The menu still linked to /blog/ addresses, so those links are updated, and the sitemap is regenerated with final URLs only. Validate fix is started on the Redirect error issue, which passes within three weeks, and the page with redirect count begins to fall.
The fix, step by step
Step 1
Separate the two statuses
In Search Console open Indexing, then Pages, and export both Page with redirect and Redirect error. Treat Page with redirect as information: check only whether any page you want indexed appears there. Treat every Redirect error URL as a task. Sort the error list by pattern, such as protocol, host, trailing slash or one section of the site, because a single faulty rule usually explains most of the entries at once.
Step 2
Trace each chain with curl
Run curl -sIL on a sample of error URLs and filter for the status and location lines. Count the hops and note the final status. Look for two URLs alternating, which signals a loop, for chains of three or more hops, and for a location header that is empty, malformed or growing longer each time. Write down which rule produces each hop: server, plugin, CMS setting or CDN.
Step 3
Break loops at the source
Find the two rules that disagree and remove one. If Cloudflare is on Flexible SSL while the origin forces https, change the SSL mode to Full (strict). If WordPress addresses use http while the server forces https, set both addresses to https. If www and non-www rules live in different places, keep one. Run curl again and confirm the URL now ends in a 200 without repeating.
Step 4
Collapse chains into one hop
Rewrite redirects so every old URL goes straight to its final https address with a single 301. Merge protocol and host rules into one rule, as in the nginx return 301 or Apache RewriteRule examples. Update older page redirects that point at URLs which now redirect again. Keep each redirect in one place. Use curl -sL -w '%{num_redirects}' to confirm each old URL now reports one hop.
Step 5
Check the destination returns 200
Fetch each final URL with curl -sI and confirm it returns 200, is not blocked by robots.txt and carries no noindex. A redirect to a 404, a login page or another redirect will keep the URL out of the index. Avoid sending many unrelated old pages to the home page. Map each one to the closest matching live page, or let it return 404 or 410 if no match exists.
Step 6
Update internal links and the sitemap
Crawl the site and list every internal link, canonical tag, hreflang reference and sitemap entry that points at a redirecting URL. Replace each with the final address. Pay attention to menus, footers and templates, which repeat across every page. Regenerate the XML sitemap so it contains only URLs that return 200, and resubmit it in Search Console. Recrawl afterwards to confirm no internal links hit a redirect.
Step 7
Test like Googlebot and clear caches
Purge the CDN and server cache, then test with a Googlebot user agent using curl -sIL -A followed by the Googlebot string, to catch firewall or bot rules that redirect only crawlers. Run a live test in URL Inspection on a fixed URL; it should report the redirect target or, for the final page, that it is available to Google. Use a private browser window, since your normal browser may have cached old 301s.
Step 8
Validate and monitor
In the Page indexing report, open the Redirect error issue and click Validate fix. Google recrawls the listed URLs and reports progress over the next few weeks. Check that the Page with redirect count levels off and then falls as Google stops finding old URLs through your links. Add a curl check of the http, https, www and non-www home page to your routine after every SSL, CDN or plugin change.
Edge cases worth knowing
- 301 or 302. Google follows both. A 302 suggests the move is temporary, so Google may keep the old URL as canonical for longer. Use 301 or 308 for permanent moves; see 302 vs 301.
- Loops only for bots. Some firewalls redirect suspected bots to a challenge page that redirects again. Test with a Googlebot user agent and check your server logs.
- Geo and language redirects that send visitors by IP address can trap Googlebot, which mostly crawls from the United States. Offer a choice instead of forcing a redirect.
- Redirects to removed pages. If the destination returns 404, the URL moves to Not found instead.
Keeping it fixed
Keep a single list of redirects in one place, and when you add a new one, check whether any existing rule points at the URL you are moving. If it does, update that rule to the new final address so chains never form. After any change to SSL, CDN, host or plugin settings, run the curl check on the home page with both http and https and with and without www. Crawl the site monthly for internal links that hit a redirect, and keep the sitemap generated from live, final URLs only.
1. Is page with redirect a problem in Search Console?
Usually not, because it simply means the URL redirects and Google indexed the destination instead. Old addresses, http to https moves, www changes and trailing slash variants all appear here after they are redirected. It needs action only if a page you want indexed is listed, or if the count keeps growing long after a migration, which means your own links or sitemap still point at old URLs. In that case, update the links and sitemap to use the final addresses.
2. What causes a redirect error in Search Console?
A redirect error means Google could not follow a redirect to a working page. Google lists four causes: a chain that was too long, a redirect loop, a redirect URL that grew past the maximum length, and a bad or empty URL in the chain. In practice loops are the most common, usually between http and https or between www and non-www, caused by two rules in different places that disagree, such as a server rule and a CDN or WordPress setting.
3. How many redirects will Googlebot follow?
Googlebot follows up to ten redirect hops in a chain. If it has not reached content by then, it stops and Search Console reports a redirect error. Even well before that limit, every extra hop slows visitors down and adds a point of failure, so aim for one redirect from any old URL to its final address. Chains usually build up over several migrations, when old rules keep pointing at URLs that were themselves redirected later.
4. How do I fix too many redirects on WordPress?
Too many redirects on WordPress is almost always a loop between two settings that disagree. Check Settings, then General, and make sure the WordPress Address and Site Address both use https and the same host as your server rules. If you use Cloudflare, set SSL mode to Full (strict) rather than Flexible. Then look for duplicate rules in a redirect plugin, .htaccess and the CDN, and keep only one. Test with curl, because your browser may have cached the old redirect.
5. Should I use a 301 or a 302 redirect?
Use a 301 for permanent moves, which covers nearly every change of URL, domain or protocol. Google follows both, but a 302 says the move is temporary, so Google may keep the old URL as the canonical for longer. A 308 is the permanent equivalent that keeps the request method, and Google treats it like a 301. Use 302 or 307 only for genuinely short-term changes, such as a page that will return after a promotion ends.
6. How long does it take for redirect errors to clear?
Redirect errors usually clear within one to four weeks after you fix the rule and start Validate fix in Search Console. Google recrawls the listed URLs during validation and removes them from the error as it confirms each one now resolves. Page with redirect entries fade more slowly, sometimes over several months, because Google keeps checking old URLs it knows about, especially if other sites still link to them. That slow fade is normal and not a sign of a problem.
7. Should I remove old redirects once Google has indexed the new pages?
No, keep permanent redirects in place for at least a year, and longer if the old URLs still get visits or have links from other sites. Removing them turns those links and bookmarks into 404 errors, and any value the old URLs earned is lost. Redirect rules cost very little to keep. Instead of removing them, update your own internal links and sitemap so your site no longer relies on them, and make sure each rule points straight at the final address.
Our redirect checker follows every hop for a URL or a whole crawl, shows each status code and destination, and flags loops, long chains and internal links that still point at redirecting addresses.
Open Redirect Fixes โ