The checks
Fourteen checks, every line
Each finding in a trail report carries its line number and one of these codes. "Stopped" means the line is left out of the output; the others are written as you typed them, with a reason to look twice.
StoppedLook at thisGood to know
-
C1
Chain collapsed Good to know
A rule's new address is itself an old address with a rule (A → B, and B → C). The first rule is rewritten to point straight at the end (A → C), so every visitor and crawler takes one hop. The rules table shows which addresses it used to pass through.
-
C2
Loop Stopped
Following the rules comes back to an address already visited (A → B → A), or a rule sends a page to itself with a query added. A browser would go round until it shows "too many redirects". Every rule in or leading into the loop is left out of the output, and named, until you fix one of the lines.
-
C3
Points at itself Stopped
The old and new address are the same page once the options are applied (for example /b/ → /b when "/page and /page/ are one page" is on). Left out.
-
C4
Two different targets Stopped
One old address appears twice with different new addresses. A server can only send it one way: the first line wins and the later line is left out.
-
C5
Repeated Good to know
The same old address with the same target (or a lone line repeating an address that already has a rule). Written once.
-
C6
Case twins Look at this
Two old addresses differ only in capital letters (/Contact.html and /contact.html). Apache and nginx treat them as different addresses, so each has its own rule. If your old site answered both, tick "Ignore letter case" instead.
-
C7
Query-string address Look at this
An old address like /page.php?id=5 matches only that exact query: the same page with another query, or extra tracking parameters, is not moved by that rule. These rules are written first, so a plain rule for /page.php does not catch them before they can match.
-
C8
Target not in your new page list Look at this
When you give a new page list, every on-site target is looked up in it. A target that is not there is probably a typing slip, and visitors would land on a 404 one hop later.
-
C9
Off-site target Good to know
The new address is on another host (a shop on its own domain, for example). Allowed; noted so it is a choice, not a slip.
-
C10
Home page redirected Look at this
A rule moves / itself. Every visitor to the site would be sent away from the home page. Sometimes right (a site that moved to a new domain), often a mistake.
-
C11
Address on another site Stopped
An old address written with a host that is not your site (other.net/page while your site is example.com). A rule on your server never sees requests for another host, so it is left out. With no site address typed, the host of the first full address is taken as your site.
-
C12
No target Look at this
A lone old address with no new address and nothing in your new page list that looks like it. It will answer 404 unless you choose a target. A section page or the nearest parent page is a fair choice; the home page for everything is not.
-
C13
Unchanged Good to know
A lone old address that is also in your new page list: the page kept its address, so it needs no redirect.
-
C14
Not a usable address Stopped
A line that cannot be read as an address or a pair (three addresses on one line, mailto:, control characters, a quote or backslash, more than 2,000 characters). Left out. A #part on an old address is dropped with a note, because browsers never send it to the server.
How addresses are read
- A line holds one old address, or an old and a new address separated by a space, a tab, a comma,
->or=>. Lines starting with#and a header line such asold,neware skipped. - An address can be a path (
/about) or a full address. Your site's host, with or withoutwww., is removed so both forms are the same page. - Spaces and other characters that cannot appear raw in an address are percent-encoded (
/Our Storybecomes/Our%20Story). Addresses are compared decoded, the way servers compare them. - Suggestions: first a new page with the same last name (ignoring
.html/.php, case,-and_), if exactly one has it; then the single new page sharing the most words (at least half). Suggestions never go into the output until you accept them.
How the rules are written
- Apache:
RewriteRule ^old/?$ /new [R=301,L,NE], one exact anchored rule per page, never the prefix-matchingRedirect. Characters with a meaning in patterns are escaped; spaces are written\x20; in the new address%and$get a backslash because mod_rewrite would read them as back-references. Query addresses get aRewriteCond %{QUERY_STRING}andQSD. "Ignore letter case" addsNC; not keeping the query addsQSD. - nginx:
location = "/old" { return 301 "/new$is_args$args"; }, plus the/old/twin when trailing slashes are one page; "ignore letter case" uses a~*regex location; query addresses are matched withif ($request_uri = "...")at server level;$in a new address is written%24. - Query strings: a new address with its own
?queryreplaces the visitor's; otherwise the visitor's query is kept, unless you untick that option. - Order: query rules first, then in the order of your lines.