Skip to main content

Free Tool

HTTP Redirect Checker

Test HTTP-to-HTTPS redirects, trace the full redirect chain, detect loops, and verify that permanent redirects use the correct status code for SEO equity and method preservation.

Sign in with Google or GitHub to run the scan. Your first scan is free — no credit card required.

ZeriFlow Data — 12,400+ sites analyzed

26% of HTTPS sites in ZeriFlow's scan corpus still allow HTTP connections without an automatic redirect. A further 34% use a temporary 302 redirect instead of a permanent 301 or 308 — costing SEO equity on every request.

HTTP Redirect Types Explained

Choosing the wrong redirect type loses SEO equity or breaks POST requests. Here is how each code behaves:

CodeNamePermanent?Method preserved?Use case
301Moved PermanentlyYesNo (POST → GET)Legacy HTTP→HTTPS
302Found (Temporary)NoNoTemporary redirects
307Temporary RedirectNoYesTemporary, preserves method
308Permanent RedirectYesYesHTTP→HTTPS (preferred)

308 vs 301

Use 308 for HTTP→HTTPS. It is permanent (passes SEO equity) and preserves the HTTP method — POST requests do not get downgraded to GET. This matters for login forms or API calls submitted over HTTP before the redirect fires.

Redirect Chains and Their SEO Impact

A redirect chain is when URL A → URL B → URL C. Each additional hop:

  • Adds latency — typically 100–300ms per hop on an uncached connection

  • Dilutes PageRank passing — chains compound the equity loss

  • Can trigger 'redirect limit' errors in search crawlers, leaving pages unindexed

Common chain patterns to eliminate:

3 hops — should be 1

http://www.example.com
  → http://example.com
    → https://example.com  ✓ final

Correct — direct to canonical

http://www.example.com
  → https://example.com  ✓ final

HSTS and Redirects Working Together

Once HSTS is set, browsers bypass the HTTP→HTTPS redirect entirely for return visitors — they go straight to HTTPS without making an HTTP request first. This eliminates the redirect overhead and closes the SSL-stripping window on repeat visits.

  1. 01

    Set up the 308 redirect — for first-time visitors and search crawlers

  2. 02

    Add the Strict-Transport-Security header — for repeat visitors, zero redirect overhead

  3. 03

    Submit to the HSTS Preload list — browsers ship with your domain as HTTPS-only

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload

How to Set Up Proper Redirects

Nginx

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

Apache

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

Next.js (next.config.js)

// next.config.js
module.exports = {
  async redirects() {
    return [
      {
        source: '/:path*',
        has: [{ type: 'header', key: 'x-forwarded-proto', value: 'http' }],
        destination: 'https://example.com/:path*',
        permanent: true,
      },
    ];
  },
};

Vercel (vercel.json)

{
  "redirects": [
    {
      "source": "/(.*)",
      "destination": "https://example.com/$1",
      "permanent": true
    }
  ]
}

Frequently Asked Questions

What is the difference between a 301 and 308 redirect?

Both 301 and 308 are permanent redirects that pass full SEO equity to the destination URL. The difference is method handling: a 301 allows browsers and crawlers to change the HTTP method from POST to GET when following the redirect, while a 308 preserves the original method. For HTTP-to-HTTPS redirects, 308 is preferred because a login form submitted over HTTP should still be a POST when it arrives at the HTTPS endpoint — a 301 would convert it to a GET, dropping the form data.

Do redirects hurt SEO?

A single well-configured permanent redirect (301 or 308) passes virtually all ranking equity to the destination. What hurts SEO is redirect chains — multiple hops where A redirects to B which redirects to C. Each additional hop introduces latency, and Google's crawler may not follow chains beyond a certain depth, leaving some pages unindexed. Temporary redirects (302, 307) also do not pass equity, so using them for permanent moves is a ranking mistake.

Why does my site have a redirect loop?

Redirect loops occur when A redirects to B which redirects back to A — the browser eventually gives up and shows an ERR_TOO_MANY_REDIRECTS error. Common causes include misconfigured HTTPS redirects where Nginx redirects HTTP to HTTPS but a load balancer or proxy terminates SSL and passes HTTP internally, so Nginx sees an HTTP request and redirects again. Fix by detecting the X-Forwarded-Proto header and only redirecting when its value is 'http'.

How do I redirect HTTP to HTTPS in Nginx?

Add a server block that listens on port 80 and returns a 308 permanent redirect: server { listen 80; server_name example.com www.example.com; return 308 https://$host$request_uri; }. If you are behind a load balancer that terminates SSL, add: if ($http_x_forwarded_proto = 'http') { return 308 https://$host$request_uri; } inside your main server block instead. This avoids the redirect loop caused by the proxy stripping the HTTPS connection.

What is a redirect chain and how do I fix it?

A redirect chain is a sequence of multiple redirects before reaching the final URL — for example, http://www.example.com redirecting to http://example.com then to https://example.com instead of going directly to https://example.com in one hop. Fix chains by updating the first redirect to point directly to the canonical final URL. Audit all redirect rules in your web server config, CDN, and application layer — chains often accumulate when multiple teams add redirects over time without auditing the full path.

Ready to check your website?

Full security report — 80+ checks in 60 seconds.