HTTP to HTTPS Migration

The step-by-step HTTP→HTTPS migration playbook — pre-migration audit, certificate selection, staging tests, redirect mapping at scale, canonical/sitemap/hreflang updates, getting Search Console coverage right, monitoring windows, launch-day regressions, and a rollback plan.

First published: Jul 3, 2026 · Last updated: Jul 17, 2026 · Advanced
demand #5 in HTTPS#271 in Technical SEO#378 on the site
1 evidence signal on this page

An HTTP→HTTPS migration is a protocol-only site migration: same host, paths, query strings, content and platform — only the scheme moves from http:// to https://. Because nothing else changes, 301s carry all the weight (301s don't lose PageRank) and you don't need the Change of Address tool. The order that keeps traffic: benchmark the live HTTP site, pick and install a TLS certificate (a free DV cert earns the same lightweight ranking signal as any paid one — Google checks the scheme, not the issuer), rehearse the whole thing on staging, then flip — 301 every URL one-to-one server-side, make HTTPS self-canonical, repoint every internal link/sitemap/hreflang, and fix blockable mixed content before it breaks your scripts on launch day. Afterward, add a Domain property in Search Console (it covers every protocol/host variant automatically) or verify the HTTPS properties individually if you want segmented data, submit the HTTPS sitemap, keep redirects at least a year, and monitor Crawl Stats + indexing for a dip that sticks (broken) versus a dip that recovers (settling). Have a rollback plan — but repair HTTPS first, since caching, cookies and service workers can make a true HTTP rollback unsafe — and treat HSTS preload as slow and risky to reverse, not a one-way door.

TL;DR — An HTTP→HTTPS move is a protocol-only site migration: same host, paths, query strings, content, and platform — only the scheme changes. That makes it the lowest-risk migration there is if all of that holds — but the discipline is identical to any site move. Benchmark the live HTTP site, choose and install a TLS certificate (a free DV cert earns the same lightweight ranking signal as any paid one — Google checks the scheme, not the issuer), rehearse on staging, then flip: 301 every URL one-to-one server-side (301s don’t lose PageRank), make each page self-canonical to its HTTPS URL, repoint every internal link, sitemap entry, and hreflang annotation, and kill blockable mixed content before it breaks your scripts. Add a Domain property in Search Console (it covers every scheme/host variant at once) or verify the HTTPS properties individually if you want segmented data, submit the HTTPS sitemap, and don’t touch the Change of Address tool — it’s for domain moves. Keep redirects at least a year (that’s a floor, not an expiration date). Monitor Crawl Stats and indexing: a dip that recovers is the move settling; a dip that sticks means something broke. Have a rollback plan, but repair HTTPS first — caching, HSTS, cookies, and service workers can make a true HTTP rollback unsafe — and treat HSTS preload as slow and operationally risky to reverse, not a literal one-way door.

The HTTPS hub covers why to be on HTTPS and sketches the migration at a high level. This is the deep, step-by-step companion to that section — the part where a migration actually goes wrong or goes clean.

First, right-size the risk: this is a protocol-only migration

Google treats protocol changes as site moves with URL changes; temporary ranking or reporting fluctuations are possible and no migration timeline is guaranteed. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: Google: Site moves with URL changes Transport security and Search processing are related but separate concerns. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: Google: HTTPS

Site migrations exist on a spectrum of danger. Changing your domain, your URL structure, or your CMS/platform all rewrite the identity of your URLs and carry real risk. A protocol-only switch is the low-risk case only when everything else holds steady. Confirm all of these before treating it as a one-rule redirect:

  • Hostnames — no www/non-www consolidation or subdomain changes riding along with the switch.
  • Paths and query strings — no URL restructuring, slug renames, or parameter cleanup bundled into the same release.
  • Content — pages aren’t being rewritten, merged, or pruned at the same time.
  • Platform/rendering behavior — no CMS, framework, or hosting migration happening in parallel.

When all four hold, the domain, the paths, and the content are identical; only the scheme in front of each URL moves. That’s why Google is explicit that you “don’t need to use the Change of Address tool” for it: there’s no address change to declare.

The single most important consequence: because URLs map one-to-one and deterministically (http://example.com/xhttps://example.com/x), your redirect logic can usually be a single server rule, and your redirect map writes itself. Compare that to a domain or platform move, where every old URL needs a hand-checked destination. Keep that framing — it tells you where to spend effort (certificate, mixed content, Search Console) and where not to (agonizing over redirect targets).

If you’re also changing domain or platform at the same time, stop: that’s a stacked migration, the risks multiply, and the protocol switch is the least of your worries. Do the harder move using the full site migration playbook and fold HTTPS into it.

Step 1 — Benchmark the live HTTP site before you touch anything

You can’t tell whether a migration went well without a “before” picture to diff against. Capture, while the site is still on HTTP:

  • A full crawl of the live site — save every 200 URL and, critically, every existing redirect and its target. You’ll re-run this crawl after launch and diff the two; anything that was a 200 and is now a 404 is a regression.
  • A rankings snapshot for your tracked keywords, so a post-launch dip has a baseline.
  • A Search Console export — Performance (queries, pages, clicks, impressions), the Page Indexing report, and Crawl Stats. GSC data does not transfer from the HTTP property to the HTTPS one, so this export is your only record of the “before.”
  • Your backlink profile, so you know which URLs carry the most external equity and therefore most need clean, single-hop redirects.
  • Your robots.txt and any noindex directives as they stand — you’ll want to make sure none of them silently carry over to block the HTTPS site.

Step 2 — Choose and install the TLS certificate

Here’s the SEO-relevant truth that saves people money: the ranking signal checks the URL scheme, not the certificate. Gary Illyes described it as “basically looking at the first five characters in front of the URL, and if it’s HTTPS … it will get a minimal boost.” So for SEO, a free Domain Validation (DV) certificate — Let’s Encrypt is the default — earns exactly the same signal as a paid OV or EV certificate. OV/EV buy organizational identity, not rankings. Don’t promise yourself (or a client) a ranking boost, or a special benefit for a particular certificate type or key algorithm — Google’s own description calls this a lightweight, minimal signal, not a lever worth paying for.

What you do need to get right technically:

  • Scope. A single-domain cert covers one hostname; a wildcard (*.example.com) covers one label deep — it works for foo.example.com but not foo.bar.example.com. If you run deep subdomains, plan a multi-domain (SAN) or additional certs.
  • Key strength. Google’s guidance is to “generate a 2,048-bit RSA key pair” — shorter is brute-forceable, longer wastes resources.
  • Auto-renewal. The most common post-migration incident is an expired cert. Automate renewal (Let’s Encrypt is built for it) and monitor expiry. Note the nuance: Google generally prefers HTTPS as the canonical version of a page, but that preference is conditional, not automatic — an invalid certificate, insecure dependencies, an HTTPS-to-HTTP redirect, or an HTTP canonical tag can flip Google’s canonical choice back to the HTTP URL, and HSTS cannot override that preference. Evidence for this claim Google generally prefers HTTPS as the canonical version of a page, but that preference is conditional: an invalid certificate, insecure dependencies, an HTTPS-to-HTTP redirect, or an HTTP canonical tag can flip Google's choice back to the HTTP URL. HSTS is a browser-only mechanism and cannot override Google's canonical selection. Scope: Describes Google's conditional HTTPS canonical preference, not a guarantee that certificate problems are search-invisible. Confidence: high · Verified: Google: Consolidate duplicate URLs So an expired cert is not a harmless non-event for Search — it’s simultaneously a UX/security emergency (a full-screen browser warning that destroys user trust) and a real risk to your HTTPS canonical preference the longer it persists. Fix it fast either way. (For the full certificate-failure taxonomy — expired, self-signed, hostname mismatch, incomplete chain — see the TLS/SSL certificates deep dive.)

Step 3 — Rehearse on staging

Do the whole flip on a staging/pre-production copy first. What you’re validating:

  • The redirect rule fires for every path shape, including query strings, trailing-slash variants, and www/non-www.
  • No redirect loop (a misconfigured rule that bounces HTTPS back to HTTP and around again locks everyone out — including you).
  • Pages render clean with no blockable mixed content in the DevTools console.
  • Your canonical tags already emit https:// on staging.

Guard the staging copy from indexing (auth or a noindex you remember to remove — a stray migration-only noindex that survives to production is a classic self-inflicted wound). Google’s own guidance calls this out: don’t forget to remove noindex or robots.txt blocks that were only needed for the migration.

Step 4 — Redirect mapping at scale

For a protocol switch, the mapping is deterministic, so you drive it with one rule, not a giant lookup table:

  • Server-side, one-to-one, and permanent (301). Every http:// URL → the same path on https://. Do it in the server/edge config (Apache, Nginx, or your CDN), not in application code and not with client-side JavaScript, so bots see a clean server 301.
  • No redirect chains. If you already had HTTP redirects (say http://ahttp://b), don’t let the HTTPS switch turn that into http://ahttp://bhttps://b. Update the original rules so old URLs land on the final HTTPS destination in one hop. Google will follow up to 10 hops, but it “advise[s] redirecting to the final destination directly.” Every extra hop is wasted crawl budget and a little lost speed.
  • Never mass-redirect to the homepage. Unmatched URLs should still resolve to their own HTTPS twin. Dumping everything on / is the migration mistake that actually loses rankings.
  • Verify the map with a crawl. Re-crawl the HTTP URL list after launch and confirm each returns a single 301 to the right HTTPS URL — not a 302, not a chain, not a 404.

Step 5 — Repoint every canonical, sitemap, and hreflang signal

Redirects do the heavy lifting, but don’t make Google lean on them to fix sloppy internals. Update the actual signals:

  • Canonicals. Every page should carry a self-referencing rel="canonical" pointing at its own https:// URL — Google’s site-move guidance states “Each new URL should have a self-referencing rel=“canonical” <link> tag.” A canonical still pointing at http:// fights your migration. (This is exactly the kind of conflicting signal the canonicalization topic warns about — align every signal on the HTTPS URL.)
  • Internal links. Change them in the templates and content to https:// (or protocol-relative/root-relative) — don’t leave thousands of internal links pointing at http:// and relying on the redirect to clean up. Every internal http:// link is an unnecessary redirect hop for both users and bots.
  • XML sitemaps. Regenerate them with the HTTPS URLs only, listing canonical, indexable pages, and update lastmod. Submit the new sitemap in GSC after launch.
  • Hreflang. If you run an international setup, every hreflang annotation must reference the HTTPS version of each alternate. Half-migrated hreflang (some http, some https) is a silent, hard-to-diagnose international SEO bug.
  • Structured data and Open Graph URLs. og:url, canonical references inside JSON-LD, and any hardcoded absolute URLs should all be HTTPS.

Step 6 — Kill mixed content before launch, not after

Mixed content is an HTTPS page loading a sub-resource over HTTP. It’s the most common launch-day regression. The current terminology (the older “active/passive” split is historical, but you’ll still see it in older docs and tooling) splits it by what the browser does about it:

  • Blockable mixed content — scripts, stylesheets, iframes, XMLHttpRequest/ fetch (the old “active” bucket). Browsers block these outright because a tampered script can rewrite the whole page. This is what actually breaks the site after the flip: a blocked stylesheet or JS bundle can leave a page unstyled or non-functional. Fix these first.
  • Upgradable (optionally-blockable) mixed content — images, audio, video (the old “passive” bucket). Modern browsers increasingly auto-upgrade these requests to HTTPS transparently and block them if the upgrade fails, rather than just warning and displaying them over HTTP; treat “it still loads” as a browser-version-dependent behavior, not a guarantee. Fix next regardless.
  • Exceptions exist — some browser/embed contexts (certain plugin-loaded resources, some legacy <applet>/<embed> cases) don’t follow either rule cleanly, which is one more reason to verify behavior in the browsers your audience actually uses rather than assuming the general rule.

Find it by crawling the HTTPS site (Ahrefs Site Audit, Screaming Frog), watching the Chrome DevTools console, or collecting CSP reports. As a transitional proactive net, the Content-Security-Policy: upgrade-insecure-requests header tells the browser to silently upgrade http:// sub-resource requests to https:// before it makes them — but a CSP header doesn’t prove the HTTPS version of every endpoint actually exists or behaves the same as the HTTP one, and it doesn’t replace fixing the source URLs or testing in real browsers. One clarification that saves confusion: an ordinary anchor link to an HTTP page isn’t mixed content — it just navigates.

Step 7 — Get Search Console coverage right

This is the step people underestimate — but it’s a decision, not a universal checklist. Search Console’s URL-prefix properties track http://example.com, http://www.example.com, https://example.com, and https://www.example.com as four separate properties that don’t share data. You are not required to verify all four:

  • A Domain property aggregates every protocol and subdomain variant automatically — add one and it absorbs the switch without you touching anything else. This is the simplest default for most sites.
  • URL-prefix properties segment data by exact protocol and host. Keep or add them only if you deliberately want that segmentation — for example, comparing how much HTTP straggler traffic is still arriving against the live HTTPS site. That’s a reporting choice, not a requirement.

Either way:

  • Submit the new HTTPS sitemap wherever you’re tracking the site (the Domain property or the HTTPS URL-prefix property).
  • Do not use the Change of Address tool. Google is explicit: “If you’re moving your site from HTTP to HTTPS, you don’t need to use the Change of Address tool.” That tool is only for domain-level moves, and using it here is a well-meaning mistake.
  • Keep any HTTP properties you already had verified — they’ll show the redirects being processed and the old URLs dropping out of the index, which is useful monitoring signal, not clutter.
  • Revisit your disavow file, if you have one — its entries reference HTTP URLs, and it lives per-property.

For diagnosing individual URLs rather than tracking the whole site, GSC’s HTTPS report flags certificate, redirect, canonical, robots, and sitemap-evaluation reasons a URL didn’t move to HTTPS. Treat it as a sampled diagnostic tool, not a full inventory — it’s sampled and it ignores query parameters when matching URLs, so it won’t catch everything your own crawl would. See the GSC HTTPS report deep dive for how to read it.

Step 8 — Monitoring windows: settling vs. broken

Expect “temporary fluctuation in site ranking during the move” — that’s normal and not a reason to panic or revert. The discipline is telling a settling dip from a broken one:

  • A dip that recovers over days to a few weeks is the index swapping HTTP URLs for HTTPS ones. Google notes a small-to-medium site takes a few weeks for most pages to move; larger sites take longer.
  • A dip that sticks means something broke — a stray robots.txt block, a noindex that survived from staging, canonicals still pointing at http://, internal links en masse still on HTTP, or redirect chains bleeding equity.

There’s no fixed recovery window — track these independently rather than waiting for one number to say “done”:

  • TLS/browser behavior — certificate validity and chain, and the actual DevTools console on representative pages (no mixed-content errors, no certificate warnings). This is the one Search metrics won’t tell you about.
  • GSC Crawl Stats on wherever you’re tracking the site — you want to see Googlebot fetching the HTTPS URLs and the response-code mix staying healthy (mostly 200 + the 301s on old URLs). A spike in 5xx means your server is struggling under the new load.
  • Page Indexing report — HTTPS URLs moving to “Indexed,” HTTP URLs moving to “Page with redirect.” That crossover is exactly what you want to see.
  • URL Inspection on a few key pages — confirm the reported canonical is the HTTPS URL and the page renders without mixed content.
  • Server logs — the ground truth for which URLs bots actually hit and what status they got. Watch for bots still hammering HTTP URLs (fine, briefly) or hitting chains/loops (not fine).
  • Analytics and business outcomes — a chunk of “direct” traffic can appear because HTTPS→HTTP referral data gets stripped, so make sure your own outbound links go to HTTPS destinations; also track conversions/revenue independently — a ranking metric recovering doesn’t guarantee the business metrics did too.

Monitor actively for 2–4 weeks as a rule of thumb, then keep a lighter eye on it until indexing fully crosses over — larger or slower-crawled sites can take longer, and there’s no guaranteed end date.

Step 9 — Keep the redirects, and add HSTS deliberately

  • Keep the 301s for the long haul. Google’s guidance is “as long as possible, generally at least 1 year” — that’s a floor Google recommends, not an expiration date after which it’s safe to remove them. In practice, keep them for the life of the site — external links and bookmarks on the old http:// URLs never fully disappear.
  • HSTS is a second layer, not a replacement. The Strict-Transport-Security header tells browsers to always use HTTPS for your domain, closing the “first-request problem” (that very first request from a new visitor still goes out over HTTP before the 301 fires — the window an SSL-stripping attacker wants). But when a browser honors HSTS it performs a browser-only 307 internal redirect that crawlers never see — search engines still need your server-side 301. You need both.
  • Treat HSTS preload as slow and risky to reverse — not a literal one-way door. Submitting to the browser-baked preload list (which requires max-age of at least a year, includeSubDomains — meaning the policy applies to every subdomain, not just the one you submitted, so any subdomain that isn’t fully HTTPS-ready breaks under it — and preload) closes the gap even for first-time visitors. Removal is genuinely possible via hstspreload.org, but it’s slow (the change has to propagate through browser release cycles) and every browser already on the old list keeps enforcing HTTPS-only until it updates — operationally risky, not literally irreversible. Google’s warning is blunt: “Don’t enable HSTS until you’re certain your site operation is robust enough to avoid ever deploying HTTPS with certificate validation errors.”

Step 10 — Have a rollback plan (and know its limits)

Even a low-risk migration deserves an exit — but the default move when something breaks is to repair HTTPS, not revert to HTTP. A “rollback” is a limited safety net, not a guaranteed reversal: cached 301s in browsers and CDNs, Secure-flagged cookies, service workers registered under the HTTPS origin, and HSTS/preload policy can all make serving HTTP again unsafe or simply ineffective for a chunk of your visitors, even if you did everything right on launch.

Before you flip:

  • Time the launch for low traffic — Google explicitly suggests you “time your move to coincide with lower traffic, if possible.” A quiet window means fewer users hit any launch-day bug and you have room to react.
  • Keep HTTP serving underneath the redirect. Don’t tear down the HTTP listener; keep it alive so the 301s have something to fire from, and so a redirect-rule revert is available as an option if the HTTPS site is badly broken.
  • Do not enable HSTS on day one. HSTS (and especially preload) makes an HTTP rollback far less viable — once a browser has cached the policy, it won’t talk HTTP to your domain regardless of what your server does. Add HSTS only after the HTTPS site has proven stable for a while.
  • Define your abort criteria in advance — e.g., site-wide 5xx, a redirect loop, or mass mixed-content blocking. When you hit them, work the problem in this order: (1) can you fix the HTTPS bug directly (bad cert, missing resource, broken canonical)? Usually yes, and that’s faster and safer than reverting. (2) Only if HTTPS itself is unusable, revert the redirect rule as a stopgap — and expect it to be incomplete: previously cached redirects, cookies, and service workers won’t un-cache themselves just because your server changed its mind.

Diagnose calmly rather than debugging live, and treat “revert to HTTP” as a break-glass option you hope never to need — not a routine, clean undo.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin an expert quote first.