Hosting Autopsy / The redesign that lost its old addresses

The redesign that lost its old addresses

HOSTING AUTOPSY

7 min read · 1,546 words

This is a composite case written by the editors. It is built from patterns that come up often in support work and is not the account of a particular named person or company.

A consultancy of about twenty people relaunched its website with new page names and a cleaner structure. The designer was proud of the result: short, elegant addresses with no clutter, no dates, no category folders. The old site had been built up over eleven years, and nobody had thought of the old addresses as an asset. Nobody mapped them.

The new site looked wonderful and loaded quickly. What it did not do was answer to any of the addresses the rest of the internet already knew.

The launch weekend

The switch happened on a Friday evening. The new site was built on a fresh installation, tested on a temporary address, and then pointed at the live domain. Everything on the checklist was ticked: the certificate was valid, the contact form delivered, the logo was sharp on a phone.

The checklist had no line for old addresses, because the people writing it were thinking about the new site, not the history of the previous one. The old articles had lived at addresses such as /blog/2019/04/how-we-run-workshops/. The new equivalents were /insights/workshops/. Same content, mostly, under a different name. To the server, these are unrelated requests, and anything it does not recognise gets a 404 response and the site's error page.

Over the weekend nobody noticed. The team typed the new addresses they had been given and everything worked. That is the trap: the people who know a site best only ever visit the pages that exist.

What people noticed first

The first sign came from outside. On the Tuesday, a partner organisation emailed to say that the link to the consultancy's report on their resources page led to an error. On Wednesday two more followed. A former client mentioned on the phone that her bookmark no longer worked and she had assumed the firm had folded its blog.

The analytics told the same story with a delay. Organic search traffic, which had been steady for years, fell by about a third in the first week and by more than half within a month. Search engines do not forget an address the moment it fails, but they do stop trusting it, and after repeated 404 responses the pages drop out of the results. The new addresses had no history, so nothing replaced them.

The firm's own search for its flagship article now returned a result from a directory site that had quoted it, not the original.

Wrong turns

The first theory was that search engines were slow to catch up, which is true as far as it goes. The team waited a fortnight. The second theory was a ranking penalty for the redesign, and a consultant was asked to review the page titles and headings. The titles were fine.

The third theory, closer to the truth, came when someone pasted an old article address into a browser and saw the error page. Then someone opened the server's access log, which had been there all along, and counted. In one afternoon there were several thousand requests for addresses that returned 404, many of them from search crawlers and from visitors arriving via other sites. The log was a ready-made list of everything that was missing.

203.0.113.40 - - [12/May/2025:14:02:11 +0000] "GET /blog/2019/04/how-we-run-workshops/ HTTP/1.1" 404 5120 "https://partner.example.net/resources/" "Mozilla/5.0"

The referrer field at the end showed that the visitor had followed a link from another site. That is a person who wanted the page and was turned away.

What a redirect actually does

A redirect is a short reply from the server saying "that has moved, look here instead". The browser follows it without the visitor noticing, and a search engine reads a permanent one (status 301) as an instruction to transfer what it knew about the old address to the new one. A 404, in contrast, says "nothing here", and the old address's history goes nowhere.

Without a redirect map Old link ona partner site Web serverno such path 404 error pagehistory lost With a one-to-one 301 Old link ona partner site Web server301 + new path /insights/workshops/200 OK Same visitor, same link. Only the server's answer differs.
The old link is the same in both cases; what the server answers decides whether the visitor and the search engine arrive.

Building the map

The long afternoon of spreadsheet work was done by one person with three sources. The first was the old sitemap. The second was a crawl of the old site, which was still reachable on a temporary copy. The third was the access log, filtered for requests that returned 404, sorted by how often each address was requested. That last list set the priority: a page requested 900 times came first, a page requested twice could wait.

Each old address got a column for its closest new equivalent. Where an article had been merged into another, the merged page was the target. Where nothing similar existed, the nearest category page was used, and a few truly dead pages were left to return 410 (gone), which is an honest answer.

Old addressRequests last monthNew targetAction
/blog/2019/04/how-we-run-workshops/912/insights/workshops/301
/services/strategy.php340/services/strategy/301
/news/2016/office-move/41/about/301 to nearest
/blog/2014/april-fool/2none410

The principle is to send each visitor to the page that answers the question they came with. Sending everything to the homepage is quicker, but search engines tend to treat a flood of unrelated redirects as soft 404 responses, and a visitor looking for a report does not want a landing page.

Writing the redirects

On an Apache-based host, which covers most shared plans, the rules go in the .htaccess file in the web root. A short list can use one line per address:

Redirect 301 /blog/2019/04/how-we-run-workshops/ /insights/workshops/
Redirect 301 /services/strategy.php /services/strategy/
Redirect gone /blog/2014/april-fool/

Patterns help where whole sections moved. For instance, every old year-and-month blog address that kept its final slug could be handled by a single rewrite rule, though that only works if the slugs really did survive. On nginx the equivalent is a return 301 inside a location block. The redirect generator produces the syntax for both if you do not want to write it by hand.

Two mistakes to avoid. Chains, where A redirects to B which redirects to C, waste a request and dilute the signal, so point each old address straight at its final target. And loops, usually caused by a rule that also matches its own destination, give visitors a "too many redirects" error and are best caught by testing.

The aftermath

The redirects went live the following Tuesday, about five weeks after launch. The access log showed the effect within an hour: the 404 lines for old addresses turned into 301 lines, followed by 200 responses on the new pages. Partners did not need to be asked to update their links, though several were later thanked and asked anyway, since a direct link is always better than one that depends on a redirect.

Search traffic came back in stages. Pages with plenty of inbound links recovered within a month or two. Older articles that had already dropped out of the index came back slowly or not at all, and some of the lost visitors had moved on to other sources. The firm eventually settled at roughly four fifths of its earlier organic traffic, with the remainder written off.

Before launchAfter launchAfter redirects Weekly organic visits (illustrative)
Illustrative shape of the traffic: a steady base, a fall after launch, and a partial recovery once the old addresses answered again.

A ten-minute check

Before any redesign or move, export the list of live addresses from your sitemap, your analytics (pages that received visits in the last year) and your access log. After launch, test a sample of the old addresses with curl -I:

curl -I https://example.com/blog/2019/04/how-we-run-workshops/
HTTP/2 301
location: https://example.com/insights/workshops/

You want a 301 and a location header that points straight at a page returning 200. For a long list, a short shell loop over a text file does the job. Then check the logs a few days later for the 404 responses that still appear, sorted by frequency, and add what you missed. The status code reference explains the codes you will meet.

Common questions

Do I need redirects if my addresses stay the same?

No, but check anyway. Even a small change such as dropping .html or adding a trailing slash is a different address to the server.

301 or 302?

Use 301 for a permanent move. A 302 says the move is temporary, and search engines may keep the old address in their index.

How long should I keep the redirects?

At least a year, and ideally for as long as you control the domain. They cost almost nothing to serve.

Will the redirects bring everything back?

Not everything. They preserve the connection between old and new, but pages that were already dropped from the index have to be found again.

What would have caught it

PreviousThe CAA record that blocked its own certificateNextThe plugin that emailed every order to someone who had left

More from Hosting Autopsy

Autopsy

The one-line .htaccess edit that took three sites down

An administrator added a redirect rule to a shared .htaccess file in a parent folder, which three sites...

Autopsy

The staging site that emailed real customers

A developer copied a production database to a staging site to test a new order workflow. The copy contained...

Autopsy

The CDN that served one customer's basket to another

A boutique put its site behind a CDN and turned on the option to cache everything, including HTML. Speed...