Skip to content

Latest commit

 

History

History
283 lines (220 loc) · 13.1 KB

File metadata and controls

283 lines (220 loc) · 13.1 KB

HTTPS Migration Checklist

Moving a website from HTTP to HTTPS while checking for mixed-content and redirect issues.

An HTTPS migration is usually straightforward, but missed http:// references can trigger browser warnings and temporary ranking changes. Google treats HTTP→HTTPS as a site move, so test redirects, canonical URLs, and mixed content before launch.

This checklist covers the end-to-end HTTPS migration, from certificate acquisition through post-launch monitoring.


Phase 0: Pre-Migration Planning

Certificate Planning

  • Choose certificate type: single-domain, wildcard (*.example.com), or multi-domain (SAN)
  • Choose certificate authority: Let's Encrypt (free) or a paid CA for EV/OV certificates
  • If using a CDN (Cloudflare, Fastly, Akamai), understand how SSL termination works. Your CDN may manage certificates for you
  • Plan for certificate renewal before migration (Let's Encrypt: 90-day expiry, auto-renew with certbot or acme.sh)
  • Plan for all subdomains: will blog., app., cdn., api. all move to HTTPS at the same time?
  • Document all domains and subdomains that need certificates
  • Check HSTS preload eligibility: do you want to submit to the HSTS preload list?

SEO Baseline

  • Record current organic traffic (Search Console, 30-day average)
  • Record current keyword rankings
  • Record indexed page count in Search Console
  • Add and verify the HTTPS property in Google Search Console (separate property from HTTP)
  • Add HTTPS property in Bing Webmaster Tools
  • Document the current URL structure. This shouldn't change, but confirm it

Content Audit

  • Crawl the entire HTTP site and identify all internal http:// links
  • Identify all hardcoded http:// URLs in:
    • HTML (anchors, images, scripts, stylesheets, iframes, videos, audio)
    • CSS (background images, font imports, cursor files)
    • JavaScript (API calls, asset paths, redirects)
    • Content (CMS content, blog posts, product descriptions)
    • Structured data (schema.org references, JSON-LD)
    • Sitemaps
    • robots.txt
    • RSS/Atom feeds
    • Email templates
    • Canonical tags
    • hreflang tags
    • Open Graph and Twitter Card meta tags
    • Platform-specific locations where hardcoded HTTP URLs might lurk (CMS template files, DB-stored content, etc.)

Phase 1: Technical Preparation

Certificate and Server Config

  • Obtain and install SSL/TLS certificate on the server
  • Configure the web server (Nginx, Apache, IIS, etc.) to listen on port 443
  • Configure TLS settings:
    • Minimum TLS 1.2 (TLS 1.0 and 1.1 are deprecated)
    • Disable insecure cipher suites
    • Enable HTTP/2 (requires HTTPS on most servers)
    • Enable OCSP stapling (optional, improves performance)
  • Test SSL configuration: use SSL Labs Server Test (ssllabs.com/ssltest/) and aim for an A or A+ rating
  • Set up certificate auto-renewal (certbot, acme.sh, or CDN-managed)
  • Configure HTTP → HTTPS redirect:
    • 301 redirect for all HTTP requests to HTTPS
    • Redirect at the server level (before any application logic)
    • Preserve the full URL path and query string in the redirect
    • Use a single redirect, not a chain (HTTP → HTTPS directly)
  • Enable HSTS header: Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
    • Start with a small max-age (e.g., 86400) during testing, increase once you're confident
    • Only add includeSubDomains if all subdomains support HTTPS
    • Only add preload if you intend to submit to the HSTS preload list

Content and Code Updates

  • Update all internal links to HTTPS (or use protocol-relative URLs: //example.com/path)
  • Update all asset references: images, CSS, JS, fonts, videos
  • Update all third-party resource references to HTTPS (if the third party supports HTTPS)
  • Update canonical tags to HTTPS
  • Update hreflang tags to HTTPS
  • Update Open Graph and Twitter Card tags to HTTPS
  • Update structured data references to HTTPS
  • Update sitemaps: all URLs should be HTTPS
  • Update robots.txt: any references should be HTTPS
  • Update RSS/Atom feed URLs
  • Update PWA manifest (if applicable)
  • Update Content Security Policy (CSP) headers if you use them: add HTTPS sources, remove HTTP

Third-Party Integrations

  • Update CDN configuration to serve assets over HTTPS
  • Update analytics tracking code (Google Analytics, GA4, GTM) to use HTTPS or remove protocol
  • Update ad scripts and pixels to HTTPS
  • Update embedded widgets (chat, forms, booking, reviews) to HTTPS
  • Update API endpoints to HTTPS (if your backend APIs are moving too)
  • Update webhooks and callback URLs
  • Update email template links to HTTPS
  • Update social sharing buttons and configurations
  • Verify brand-specific third-party integrations over HTTPS

Phase 2: Testing

Automated Testing

  • Run a full crawl of the HTTPS staging site and check for http:// references in source code
  • Use a mixed content scanner (e.g., mixed-content-scan CLI tool, or browser DevTools Security panel)
  • Run PageSpeed Insights / Lighthouse on HTTPS. Performance should remain the same or improve (HTTP/2 benefits)
  • Test SSL Labs on the production-ready HTTPS config
  • Test with various SSL checkers: whynopadlock.com, jitbit.com/sslcheck

Manual Testing

  • Open the HTTPS staging site in Chrome, Firefox, Safari, Edge
    • Look for the padlock icon. Is it locked?
    • Open the browser console. Any mixed content warnings?
    • Check the Security tab in Chrome DevTools
  • Test critical user flows:
    • Homepage → navigation → key landing pages
    • Search → search results → content page
    • Login → authenticated experience
    • Checkout (e-commerce): the payment page must be 100% secure content
    • Form submissions
  • Test on mobile browsers (iOS Safari, Android Chrome)
  • Test with common browser extensions that can trigger mixed content warnings (ad blockers, privacy extensions)
  • Test with HTTP/2: verify HTTP/2 is enabled and working on HTTPS

Edge Cases

  • Legacy browsers: if you support IE11 or older, test SSL compatibility (TLS 1.2 minimum may break very old browsers)
  • Embedded content: if your site is embedded in iframes on other domains, test that embedding still works over HTTPS
  • RSS readers: test your RSS feed over HTTPS (some older readers don't handle HTTPS feeds well)
  • Email clients: test that email template images and links work over HTTPS
  • CDN and caching: verify that HTTPS caching works correctly. Some CDN configs cache the redirect rather than the content
  • Rate limiting: the HTTP→HTTPS redirect can trigger rate limits on some servers during the transition

Phase 3: Launch

Go-Live Sequence

  • 1. Deploy the HTTPS version (SSL + server config + updated content) to production
  • 2. Enable HTTP→HTTPS redirect at the server level
  • 3. Verify the redirect works: curl -I http://example.com returns 301https://example.com
  • 4. Verify the redirect preserves path and query string
  • 5. Verify HSTS header is present on HTTPS responses
  • 6. Verify the padlock icon in all major browsers
  • 7. Submit the HTTPS sitemap to Google Search Console
  • 8. Use the "Change of Address" tool in Search Console, or wait for Google to pick up the redirects (HTTPS is handled specially)

Immediate Verification

  • Homepage: padlock, no mixed content warnings
  • Key landing pages: same check
  • Checkout/payment: especially critical
  • Search Console: HTTPS property is receiving data
  • Analytics: traffic is flowing to the HTTPS property
  • Redirect: http://example.com/any-pagehttps://example.com/any-page with 301

First 24 Hours

  • Monitor Search Console: new HTTPS pages being indexed? Old HTTP pages dropping?
  • Monitor analytics: any traffic drop? (Small dip is normal, free-fall is not)
  • Check server logs: any spikes in errors?
  • Check error tracking for JavaScript errors related to HTTPS
  • Review browser console reports from real users (if you have error tracking)

Phase 4: Post-Launch and Long-Term

First Week

  • The HTTP and HTTPS properties in Search Console should show the shift: more traffic on HTTPS, less on HTTP
  • Full crawl of the HTTPS site: any remaining http:// references?
  • Check backlinks: your existing backlinks still point to HTTP. The redirect handles this, but you can reach out to update them
  • Verify all third-party integrations are working over HTTPS
  • Monitor for any third-party scripts that may have broken (some older scripts don't support HTTPS)

First Month

  • Rankings should have stabilized. Compare to pre-migration baseline
  • HTTP indexed pages should be nearly zero (Google recognizes the redirects)
  • HSTS max-age can be increased to 31536000 (1 year) if all is stable
  • Consider HSTS preload submission: hstspreload.org
  • Reach out to major backlink sources to update links to HTTPS
  • Update any external profiles, directories, and social media to use HTTPS URLs

Long-Term

  • Certificate auto-renewal: verify it's working (set a calendar reminder to check in 60 days)
  • Monitor for certificate expiry. Automated alerts are essential
  • HTTP should remain accessible with a redirect. Don't turn it off; some legacy clients need it
  • Document the HTTPS setup for future team members

HTTPS Migration: Quick Reference

Nginx Redirect Config

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate     /etc/ssl/certs/example.com.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    # ... rest of site config
}

Apache Redirect Config

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    Redirect permanent / https://example.com/
</VirtualHost>

Common Mixed Content Scenarios

Source Fix
<img src="http://..."> Change to https:// or //
background-image: url(http://...) in CSS Change to https:// or //
<script src="http://..."> Change to https:// or host locally
fetch('http://api...') in JS Change to https://
YouTube embed with http:// Change to https:// (YouTube supports it)
Google Fonts with http:// Change to https://
CDN asset with http:// Change to https:// (all major CDNs support it)
Third-party service that doesn't support HTTPS Replace the service, proxy through your server, or accept the mixed content warning (last resort)

Common Mistakes in HTTPS Migrations

  1. Canonical tags still pointing to HTTP. This sends conflicting signals. Update them all to HTTPS.
  2. Sitemaps still listing HTTP URLs. Google will find these and re-crawl HTTP, slowing the migration.
  3. Not allowing HTTP at all after the switch. HTTP should redirect to HTTPS. Don't just block port 80. Some systems and bots only speak HTTP and need the redirect to recover.
  4. HSTS with includeSubDomains when not all subdomains support HTTPS. This will break those subdomains for users who have visited the main site.
  5. Forgetting about the old Search Console property. You need a new HTTPS property because Google treats HTTP and HTTPS as separate properties.
  6. Self-referencing hreflang tags still in HTTP. If your site is multilingual, this will confuse Google's language targeting.
  7. Not testing with a real certificate before launch. Self-signed certs in staging hide mixed content issues. Test with a valid certificate.
  8. Hardcoded http:// in JavaScript redirects or API calls. These are harder to catch than HTML and CSS references.
  9. No HSTS header. Without HSTS, users can still access the HTTP version (manually or through old links), and every first request starts as HTTP before the redirect.
  10. Forgetting to update CSP headers. If your Content Security Policy only allows http: sources, all HTTPS resources will be blocked.

Pre-Migration Checklist (One-Page Summary)

  • SSL certificate obtained and installed
  • Web server configured for HTTPS (port 443, TLS 1.2+, HTTP/2)
  • HTTP→HTTPS 301 redirect configured and tested
  • All internal links updated to HTTPS
  • All asset URLs updated to HTTPS (images, CSS, JS, fonts, media)
  • Canonical tags updated
  • Sitemap regenerated with HTTPS URLs
  • robots.txt updated if needed
  • HSTS header configured (with appropriate max-age for your confidence level)
  • Third-party scripts and integrations verified over HTTPS
  • HTTPS Search Console property added and verified
  • Full crawl completed with zero http:// references
  • Tested in all major browsers with the padlock icon present
  • Staging tested with a real SSL certificate (not self-signed)