Glossary Term

Meta Refresh Redirect

glossary meta refresh redirect featured

A meta refresh redirect is an HTML tag that tells the browser to load a different URL after a set number of seconds. It runs in the browser, not on the server, so the original page must load before the redirect happens. It is also called an HTML redirect or meta redirect, and it is used when server-side redirects are not available.

How a Meta Refresh Redirect Works

A meta refresh redirect is a <meta> tag with http-equiv="refresh placed in the page <head>. The content attribute holds the delay in seconds, then url= and the destination.

<head>
  <meta http-equiv="refresh" content="0; url=https://example.com/new-page">
</head>

The sequence:

  1. The server returns the old page with a 200 OK status, not a 3xx redirect code.
  2. The browser loads the page. According to MDN, the timer starts once the page has completely loaded.
  3. When the delay runs out, the browser requests the URL in the tag.

Because the server sends a 200, a meta refresh is a client-side link redirect. Tools that only read HTTP headers, such as curl -L, do not follow it.

The same instruction can be sent as an HTTP header from server-side code:

Refresh: 0; url=https://example.com/new-page

Instant vs Delayed Meta Refresh

The delay value changes how Google treats the redirect. Google Search Central documents both cases:

Delay Example How Google Search treats it
0 seconds content="0; url=... Permanent redirect, like a 301
More than 0 content="5; url=... Temporary redirect, like a 302

An instant meta refresh passes the old page’s signals to the new URL as a permanent move. With a delayed one, Google is more likely to keep the old URL in search results.

A delay of 3 to 10 seconds is the classic “This page has moved, you will be redirected” pattern. The visitor sees the old page briefly, which is the main reason to use a delay at all.

Meta Refresh and SEO

Google supports meta refresh, but ranks it below server-side redirects. Its redirect documentation orders methods by how likely Google is to interpret them correctly: server-side redirects first, then meta refresh, then JavaScript redirects. Google states it recommends “a permanent server-side redirect whenever possible.”

A meta refresh is not a penalty risk by itself. Problems come from misuse:

  • Sneaky redirects. Showing search engines one page and sending visitors somewhere else violates Google’s spam policies, whatever method is used.
  • Slower load. The browser downloads and parses the first page before it requests the second.
  • Lost signals with delays. A delayed refresh is read as temporary, so the new URL may not replace the old one in search results.

Use a 301 redirect for any permanent move you control at the server or CDN.

Meta Refresh and Accessibility

Timed meta refresh fails accessibility guidelines. W3C lists it as WCAG Failure F41, which breaks success criteria 2.2.1 (Timing Adjustable), 2.2.4 (Interruptions) and 3.2.5 (Change on Request). Screen reader users may be moved to a new page before they finish reading the first one.

An instant redirect is the exception. W3C technique H76 accepts meta refresh for an instant redirect, provided the timeout is set to 0. Add a plain link to the new URL in the page body as a fallback.

When to Use a Meta Refresh Redirect

Use meta refresh only when you cannot set a server-side redirect. Common cases:

  • Static hosts that serve files without redirect rules, such as some GitHub Pages or basic file-hosting setups.
  • Hosted page builders that let you edit the HTML head but not server settings.
  • Legacy systems where the server configuration is locked.

For campaign links, meta refresh has one more cost. The tag holds a fixed destination, so query strings on the incoming URL, including UTM parameters and click IDs like gclid, are not carried over unless a script adds them. If the old page also runs an analytics tag, it records an extra pageview before the redirect.

How to Check for a Meta Refresh Redirect

A header-based checker will report a meta refresh page as a 200 with no redirect. To confirm one, inspect the HTML:

curl -s https://example.com/old-page | grep -i 'http-equiv="refresh"'

In a browser, open View Page Source and search for refresh. SEO crawlers such as Screaming Frog also report meta refresh tags they find during a crawl.

Frequently Asked Questions

What is a meta refresh redirect?

A meta refresh redirect is an HTML <meta http-equiv="refresh"> tag that sends the browser to a new URL after a delay set in seconds. It runs in the browser after the original page loads. Site owners use it when they cannot create a 301 or 302 redirect on the server.

Is a meta refresh redirect bad for SEO?

No, not when it is instant. Google Search treats a 0-second meta refresh as a permanent redirect and a delayed one as temporary. Server-side 301 redirects are still Google’s recommended option, because they are interpreted most reliably and avoid loading an extra page.

What is the difference between a meta refresh and a 301 redirect?

A 301 redirect is an HTTP status code the server returns before any page loads. A meta refresh is an HTML tag inside a page that returns 200, so the browser loads that page first and then redirects. The 301 is faster, works for every client, and is the clearer signal to search engines.

Does a meta refresh redirect pass UTM parameters?

No, not by default. The tag contains one fixed destination URL, so any query string on the incoming link is dropped. To keep UTM parameters, use a server-side redirect that forwards the query string, or add a script that appends it to the destination.

How do you add a meta refresh redirect in HTML?

Add <meta http-equiv="refresh" content="0; url=https://example.com/new-page"> inside the <head> of the old page. Set the first number to 0 for an instant, permanent redirect. Include a visible link to the new page in the body for users whose browsers block automatic refresh.

When you replace a meta refresh with a server-side redirect, confirm the new status code and every hop with the free redirect checker.