# SEO

How to Build and Test a Complete 301 Redirect Map

Desktop and mobile website plans with a launch checklist

A redirect map is the migration source of truth: every known public URL receives an explicit, evidence-led decision before launch. That may be “keep the same URL at 200,” “move permanently to a genuine replacement,” “return a real 404/410,” or “hold for investigation”—with implementation and test evidence recorded separately.

A 301 redirect map: the short answer

A redirect map is the migration control record for every old public URL. It does not mean every row receives a 301. Each URL receives an evidence-based outcome: keep the same address and return 200, move permanently to a genuine replacement, remain temporarily elsewhere, return a real 404 or 410, or be investigated before launch. The map must also record the final destination, content and metadata action, owner, test result, and post-launch evidence.

DecisionHTTP outcomeWhen it is correct
Keep200The preferred public URL and page purpose remain valid
Move permanently301 / 308A true replacement exists at a new URL
Move temporarily302 / 307The source should remain the long-term preferred URL
Remove404 / 410The content is gone and no relevant replacement exists
Hold for investigationNo release yetOwnership, replacement, traffic, links, policy, or status is unclear

First identify the kind of migration

ChangeDo public URLs change?Redirect-map role
Hosting or CDN move onlyNoRecord status parity and legacy redirect preservation; do not invent URL moves
CMS, framework, or design changeMaybeKeep existing paths where possible; map only genuine changes
HTTP to HTTPS or hostname normalizationYes, by protocol or hostUse predictable rules and verify every valuable path reaches the same final resource
Path or information-architecture changeYesCreate explicit old-to-new decisions before launch
Domain, subdomain, merge, or splitYesMap every important URL and coordinate properties, links, sitemaps, and monitoring

Do not combine a domain move, new CMS, redesign, new content strategy, and unnecessary URL cleanup simply because they share a launch date. Google recommends changing one major dimension at a time where practical. Separating change types makes failures easier to diagnose and rollback.

Freeze the migration scope and ownership

ControlDecision required
Launch boundaryDomains, subdomains, directories, locales, platforms, assets, and environments included
Source-of-truth fileOne controlled map, unique URL key, version, date, owner, and approval state
Change controlWho can add, edit, approve, implement, test, or roll back a row
Release gateWhat must be complete before redirects or DNS are changed
CommunicationWho receives launch notices, incidents, decisions, and evidence

Build the old-URL inventory from multiple sources

SourceURLs it can revealLimit
CMS or database exportPublished, draft, private, attachment, taxonomies, custom typesMay omit routes created by code, plugins, or the server
XML sitemapsURLs previously declared for discovery and indexingMay be stale, incomplete, or include only preferred URLs
Full crawlLinked pages, assets, status codes, Canonicals, metadata, alternatesCannot find unlinked or inaccessible URLs by itself
Search ConsoleIndexed, crawled, linked, sitemap, and performance URLsReports are sampled, delayed, grouped, and not a complete inventory
Analytics and conversion systemsVisited landing pages, campaigns, conversions, and historical journeysUntracked, blocked, or zero-visit URLs will be absent
Server and CDN logsReal requests from users, bots, apps, and legacy linksRetention, bot verification, privacy, and access vary
Backlink and mention toolsLinked pages, media, PDFs, old campaign URLsEvery provider has a different and incomplete index
Ads, email, social, QR, apps, and business profilesDestinations outside the organic-search inventoryOften owned by separate teams and accounts

No single export is the complete website. Merge the sources, preserve their provenance, and investigate disagreements rather than letting the latest crawl overwrite history.

Normalize URLs without losing evidence

Normalization workflow
  • Store the raw discovered URL exactly as found.
  • Parse scheme, host, port, path, query, fragment, and encoding separately.
  • Create a normalized comparison key using documented hostname, case, slash, and parameter rules.
  • Keep fragments for link QA even though they are not sent in the HTTP request.
  • Do not drop parameters until their function, traffic, links, campaigns, and duplicate behavior are understood.
  • Deduplicate only after retaining all source, performance, backlink, and ownership evidence.

Use a decision-ready redirect-map schema

Field groupRequired columns
IdentityUnique row ID, raw old URL, normalized old URL, source systems, page type, locale
EvidenceCurrent status, indexability, canonical, traffic, conversions, backlinks, internal links, owner
DecisionKeep, redirect, remove, merge, investigate; reason; approver; approval date
DestinationProposed URL, expected status, final URL, destination status, destination canonical, relevance proof
Content and SEOTitle, description, H1, content, media, schema, hreflang, metadata, date, internal-link action
ImplementationRule owner, platform, pattern or explicit rule, release, dependency, rollback
TestingFirst response, hops, final status, final canonical, body relevance, mobile, locale, test date, tester
MonitoringLaunch response, Google-selected canonical, clicks, errors, log activity, incident, next review

Keep decisions separate from implementation state

DimensionExample valuesWhy separate it
Approved outcomeKEEP, REDIRECT, REMOVE, HOLDRepresents the business and SEO decision
Implementation stateNOT_STARTED, BUILT, STAGED, LIVE, ROLLED_BACKShows what has actually happened
Test resultNOT_TESTED, PASS, FAIL, BLOCKEDPrevents “configured” from being mistaken for “working”
Post-launch statusHEALTHY, WATCH, INCIDENT, RESOLVEDPreserves monitoring and incident history

Prioritize risk without deleting the long tail

Priority evidenceWhy it matters
Revenue, qualified leads, or assisted conversionsProtects commercially useful journeys
Search clicks, impressions, and indexed historyIdentifies established organic entry points
Relevant external links and referral trafficProtects discovery, trust, and visits from outside the site
Navigation, internal links, and campaign dependenceReveals URLs embedded in important journeys
Legal, support, account, checkout, or product functionA low-traffic URL may still be operationally critical
Unknown but repeatedly requested legacy URLLogs may reveal value that current reports missed

Priority determines review order and monitoring depth, not whether a URL deserves a decision. Every known public URL still needs an explicit outcome.

Keep valuable URLs unchanged whenever possible

A redesign does not require new slugs. If the audience task, preferred address, language, and ownership remain valid, keep the URL and record 200 KEEP. Then compare the old and new page through the controls in Canonical URLs and redirects and SEO site architecture.

A KEEP row still requires parity checks
  • HTTP status, indexability, preferred hostname, and self-Canonical.
  • Title, description, H1, primary content, media, dates, and structured data.
  • Internal links, breadcrumbs, pagination, related content, and navigation.
  • Hreflang, language switcher, Open Graph, feeds, sitemaps, and API references.
  • Forms, conversions, consent, analytics, ads, and third-party integrations.

Use a permanent redirect only for a genuine replacement

Replacement testQuestion
AudienceWould the same visitor reasonably want the destination?
Task and intentDoes it complete the same job or provide the nearest complete substitute?
Subject and scopeDoes it cover the essential topic, product, service, location, or policy?
Language and marketIs it appropriate for the same locale and commercial availability?
Evidence and next actionCan the user verify the same claim and continue the journey?

A similar keyword is not enough. Record a short relevance explanation in the map so an approver can challenge weak matches before code is written.

Consolidate only when one destination can own the combined task

Consolidation patternSafe whenUnsafe when
Several overlapping articles to one guideThe guide preserves the useful questions, evidence, and internal journeyThe target is a generic category or loses distinctive value
Old service pages to a redesigned service ownerThe offer, audience, location, and next action remain equivalentDifferent services are forced into a broad overview
Legacy category to a maintained hubThe hub genuinely helps users discover the migrated resourcesThe hub is empty, noindex, or unrelated

Choose permanent and temporary status codes deliberately

CodeMeaning for the migrationUse
301Moved permanentlyPreferred server-side choice for most permanent URL moves
308Moved permanently while preserving the request methodUseful where platform behavior and non-GET requests require it
302Found; temporary moveSource should remain the long-term preferred URL
307Temporary move while preserving the request methodTemporary routing where request-method handling matters

Google treats server-side 301 and 308 as permanent redirect signals. Use a temporary redirect only when the source truly remains the intended long-term URL. Do not switch codes to chase an assumed ranking advantage.

Use real 404 or 410 responses when nothing replaces the page

OutcomeCorrect situationUser experience
404 Not FoundThe resource is unavailable and no relevant replacement existsA branded helpful error page with real 404 status
410 GoneThe owner intentionally removed the resource and wants to state it is goneA clear explanation and useful navigation with real 410 status
Relevant 301A replacement genuinely serves the same user needImmediate arrival at the final useful destination

Google recommends 404 or 410 when content is removed and no similar replacement exists. The custom error design may contain helpful navigation, but the server response must still communicate failure. A friendly page returning 200 is a soft 404, not a successful migration.

Do not send every retired URL to the homepage

Old URLBetter decision
Old About pageRedirect to the current About page if it is the true replacement
Discontinued product with a direct successorRedirect only if the successor genuinely satisfies the same need; explain the change
Expired event with an evergreen event hubKeep an archive or redirect when the hub preserves the expected task
Removed article with no useful substituteReturn 404 or 410 rather than an irrelevant homepage redirect

Use patterns only when the transformation is provably consistent

Rule typeSuitable caseControl
Exact one-to-one ruleHigh-value, exceptional, merged, renamed, or irregular URLsExplicit source and final target in the map
Pattern ruleA stable transformation such as old host to new host with unchanged pathsEnumerate matched URLs and test exclusions before release
Fallback ruleRarely justifiedNever let it hide unmapped URLs or create homepage soft 404s
Pattern-rule safety test
  • List all known URLs the rule will match.
  • List protected exceptions and higher-priority exact rules.
  • Test encoded characters, uppercase, trailing slash, parameters, files, and locale paths.
  • Prove that the generated target exists and is relevant for every matched source.
  • Prevent the rule from redirecting the destination back into itself.

Redirect directly to the final destination

FailureExampleCorrection
ChainA → B → CA → C
Protocol and host chainhttp → https → www → finalCombine normalization when the platform safely supports it
LoopA → B → AFix rule precedence and exclude final targets
Redirect to errorA → B (404)Repair or choose a valid relevant destination
Redirect to another redirecting parameter variantA → B?x=1 → BPoint to the final canonical URL unless the parameter is required

Googlebot can follow redirect chains, but Google advises pointing to the final destination directly and keeping unavoidable chains low. Every extra hop adds latency and another failure point for users, crawlers, campaigns, applications, and analytics.

Handle protocols, hosts, ports, slashes, files, and parameters explicitly

URL dimensionMigration decision
HTTP and HTTPSChoose the secure preferred version and preserve certificates on redirecting hosts
www and non-wwwChoose one public host and send every path directly to its equivalent
Default ports and staging hostsKeep them out of public Canonicals, links, sitemaps, and indexing
Trailing slash and index.htmlChoose one final convention; avoid creating chains for every request
Case and encodingPreserve or normalize according to server behavior and real URL ownership
Query parametersKeep required function and campaign data; remove duplicate or obsolete parameters only with evidence
Images, PDFs, and downloadsMap important indexed or linked assets to real replacements

Update all canonicalization signals together

Destination signal alignment
  • The old URL returns the approved permanent redirect directly to the final URL.
  • The final URL returns 200 and is not blocked or noindex.
  • The final page has a self-referential Canonical using the preferred protocol, host, path, and locale.
  • Internal links, breadcrumbs, navigation, and feeds use the final URL.
  • The current sitemap lists the final indexable URL rather than the redirecting source.
  • Structured data, Open Graph, API references, and campaign destinations use the intended final URL.

Rebuild multilingual mappings as complete clusters

When any URL in a language cluster changes, update self-Canonicals, reciprocal hreflang, language switchers, internal links, and sitemap alternates for every member. Never redirect Malay or Chinese pages to English merely because a translation was missed. Use the locale controls in multilingual SEO for Malaysia.

Preserve content and metadata, not only addresses

LayerCompare before approval
Purpose and visible contentAudience task, primary answer, service or product scope, proof, FAQs, CTA
Search presentationTitle, description, H1, image, publication and modified dates
Index controlStatus, robots, Canonical, hreflang, pagination, sitemap inclusion
Meaning and entitiesStructured data, author, organization, product, service, location, identifiers
Media and filesImage URLs, alt text, captions, video, PDFs, downloads, ownership and rights
Journeys and measurementInternal links, forms, WhatsApp, phone, checkout, consent, analytics and events

Protect staging without copying the block to production

Staging controlLaunch risk
Authentication or network restrictionCan block external QA tools; production must not inherit it
Noindex on test pagesMust be removed from indexable production templates
Disallow in staging robots.txtRobots blocking prevents crawlers from seeing page-level noindex and must not replace production rules
Temporary hostnameMust not appear in Canonicals, hreflang, structured data, feeds, or sitemaps after launch

Test two views of every redirect

Test viewWhat it proves
Do not follow redirectsThe first response has the expected status and Location header
Follow the complete journeyThe destination, hop count, final status, Canonical, language, content, and functionality are correct
Automated row test
  • Request the exact old URL without automatically following.
  • Compare actual first status and Location with the approved row.
  • Follow with a bounded hop limit and detect loops.
  • Confirm the final URL, status, content type, locale, Canonical, robots, and meaningful body.
  • Store timestamp, environment, tester or script version, and evidence.
  • Fail the release on loops, unexpected chains, irrelevant destinations, 5xx, or blocked critical pages.

Run representative journey tests, not status checks alone

JourneyWhat to verify
Search landing pageOld result reaches the right final page, answer, language, and CTA
Navigation and breadcrumbsNo link depends on a redirect and hierarchy remains coherent
Form, WhatsApp, call, booking, or checkoutConversion works and source/campaign/language context is retained
Images, PDF, feed, app, and API consumerAssets resolve, content types are correct, and clients do not break
404 and removed contentReal error status, helpful interface, no accidental indexable soft 404

Choose rollout strategy according to risk and size

SituationPractical approach
Small or medium site with one coordinated moveGoogle generally recommends moving the URLs together after complete preparation
Very large site or high operational riskPilot a stable section, learn, then roll out in controlled groups
Hosting move without visible URL changesFocus on infrastructure parity, crawl access, capacity, TLS, DNS, and legacy redirects
Domain move plus redesign desiredSeparate changes where possible so Search and incident signals are interpretable

Use Change of Address only for qualifying domain moves

MoveUse Search Console Change of Address?
example.com to example.netYes, after redirects and verification are ready
a.example.com to b.example.comYes, for the verified domain/subdomain move
HTTP to HTTPS onlyNo
www to non-www on the same domainNo
Moving paths within the same domainNo
Hosting or CDN change without public URL changesNo

Verify the relevant old and new properties with the same account, preserve verification files or tags, and review manual actions, removals, settings, and legacy controls before a domain move. The tool supplements correct redirects; it does not replace them.

Use a controlled launch sequence

Launch order
  1. Freeze the approved map, backup configuration and content, and name the release owner.
  2. Deploy final pages, assets, certificates, robots rules, analytics, and verification controls.
  3. Remove staging-only noindex, access blocks, and temporary hosts from production output.
  4. Enable approved redirects and immediately run the automated old-URL list.
  5. Validate key journeys, final Canonicals, hreflang, structured data, internal links, and sitemaps.
  6. Submit or update sitemaps; use Change of Address only when the move qualifies.
  7. Record the release time, evidence, known exceptions, and rollback decision window.

Monitor both old and new URLs after launch

WindowPrimary checks
First minutes and hoursAvailability, TLS, DNS, 5xx, loops, key redirects, forms, analytics, robots, noindex
First daysFull mapped-list recrawl, logs, 404/410, unexpected chains, sitemap processing, URL Inspection samples
First weeksOld-versus-new Search Console coverage and performance, selected Canonicals, traffic, conversions, backlinks and referral errors
Following monthsSignal transfer, lingering old URLs, seasonal comparison, content quality, redirect demand, domain and certificate renewal

Temporary visibility fluctuation can occur while Google recrawls and processes a move. That does not justify ignoring errors or promising a recovery date. Segment by page group and diagnose technical, content, demand, tracking, and business changes separately.

Define incident triggers and rollback boundaries before launch

Incident signalImmediate response
Critical pages return 5xx, loop, block, or noindexStop the release path, restore access or the last known good configuration, and retest
Large unmapped or irrelevant redirect cohortDisable the faulty rule, preserve exact exceptions, correct the map, and redeploy
Tracking or conversions failRestore the customer path first; mark reporting gaps and avoid false performance conclusions
Google selects unexpected CanonicalsCompare status, content, internal links, sitemap, redirects, locale, and Canonical signals as one system

Use business-specific thresholds based on normal error rates, traffic, conversion volume, and critical journeys. There is no universal percentage drop that proves a migration failed.

Keep redirects long enough and maintain the old infrastructure

Google recommends keeping site-move redirects for as long as possible and generally at least one year so signals and links can be reassigned as URLs are recrawled. From a user perspective, useful redirects may deserve indefinite retention. Keep old domains, DNS, certificates, and redirect hosting operational while requests still arrive, and update internal and high-control external links to reduce dependence on redirects.

A verified SEOWithJack migration example

The SEOWithJack WordPress-to-static migration uses a 53-row status map rather than a blanket redirect rule. The current automated preservation audit verifies 27 original article URLs: 26 remain matched at their original paths and one older SEO URL redirects permanently to its consolidated beginner guide. It also retains the source Rank Math evidence, tests 301, 404 and 410 decisions, and keeps production DNS outside the migration step until staging and host checks are approved.

Verified controlCurrent evidence
Redirect-map rows53
Original article URLs preserved27
Original article paths matched directly26
Original article consolidated through permanent redirect1
Production DNS changed by the buildNo

A compact row template you can copy

Old URLDecisionDestinationWhyExpectedActualOwner
/old-service/REDIRECT/services/current/Same service and audience task301 → 200Pending testSEO + Dev
/useful-guide/KEEP/useful-guide/Stable preferred URL200Pending parity checkContent
/obsolete-no-replacement/REMOVENo useful substitute410Pending testSEO
/unknown-legacy/HOLDNeeds log and backlink reviewNo releaseOpenOwner needed

Final release gate

Do not launch until
  • Every known public old URL has one approved outcome or an explicit blocked state.
  • All permanent redirects point directly to relevant final 200 URLs.
  • Removed pages return real 404 or 410 status rather than homepage or soft-404 responses.
  • Canonical, robots, hreflang, links, sitemaps, schema, metadata, media, and conversions pass comparison.
  • Staging controls cannot leak into production and production hosts cannot leak into staging evidence.
  • Automated list tests and representative user journeys pass in the release environment.
  • Monitoring, incident ownership, backup, and rollback decisions are ready.

What a redirect map cannot guarantee

A complete map cannot guarantee unchanged rankings, traffic, indexing speed, conversion rate, or a fixed recovery date. Google processes moves per URL and temporary fluctuation is normal. A redirect is one canonicalization signal; content, internal links, crawl access, sitemaps, site quality, demand, competition, platform behavior, and business operations still matter. The responsible promise is controlled implementation, verified evidence, rapid diagnosis, and documented decisions.

301 redirect map FAQ

Does every old URL need a 301?

No. Every known public URL needs a decision, not necessarily a redirect. Keep valid URLs at 200, redirect genuine moves, return 404 or 410 when no relevant replacement exists, and hold unclear cases for investigation.

Are 301 and 308 both permanent?

Yes. Google treats both as permanent redirect signals. A 308 also preserves the request method. Choose according to platform and application requirements, not a ranking myth.

Should removed pages redirect to the homepage?

Only in the rare case that the homepage truly replaces the same task. Google warns that redirecting many unrelated old URLs to one page can confuse users and may be treated as soft 404s. Use a relevant replacement or a real 404/410.

Is 404 worse than an irrelevant 301?

No. When no useful replacement exists, a real 404 or 410 is the honest technical outcome. An irrelevant redirect damages the user journey and can be interpreted as a soft 404.

Should I change URLs during a redesign?

Not unless the existing address or architecture has a genuine user, business, security, or maintenance problem. Preserving valid URLs removes migration risk and lets the redesign focus on the experience.

Can I create redirects with JavaScript?

Google can process some client-side redirects, but recommends server-side permanent redirects when possible. JavaScript adds rendering and failure dependencies and should be a fallback, not the default migration method.

How many redirect hops are acceptable?

Design for one: old URL directly to the final destination. Google can follow chains and advises keeping unavoidable ones low, but a crawler limit is not a performance target.

How long should redirects remain?

Google recommends keeping site-move redirects as long as possible and generally at least one year. Keep useful redirects longer while people, bots, links, campaigns, or applications still request the old URLs.

When should I use Search Console Change of Address?

Use it after redirects are ready for a qualifying move from one domain or subdomain to another. Do not use it for HTTP-to-HTTPS, www normalization, same-domain path changes, or a hosting move with unchanged public URLs.

How do I know the migration is complete?

There is no single instant. Confirm old requests reach approved outcomes, final pages are healthy and selected appropriately, Search Console and logs show expected transfer, key journeys convert, incidents are resolved, and redirect infrastructure remains maintained.

Official references

Planning a redesign or migration?

Share the old website and proposed structure before URLs are changed. Redirect planning is easier before launch than after traffic starts falling.

Discuss the migration on WhatsApp

Jack Lee

Jack Lee

Building Search Visibility with SEO, GEO & AI-Assisted Websites through practical projects and experiments.