meta-refresh

Page is a meta refresh. Level: Warning.

When it is raised

Raised when a <meta> tag in the first 300,000 characters of the HTML, outside comments, has http-equiv equal to refresh (ignoring case and surrounding spaces) and a content value of the form N;url=target. N is one or more digits, including 0; spaces are allowed around the semicolon, url= is matched in any case with no space between url and the equals sign, and a quote directly after url= or at the very end of the target is removed; an opening quote after a space is kept and becomes part of a relative target. The first tag that matches this pattern is the one used, unless its target is empty once quotes and surrounding spaces are removed, in which case the next matching tag is used. The target of the tag used must resolve against the page's final URL, after redirects, to an http or https address: if it does not, the check is not raised, even when a later refresh tag has an http or https target. A refresh with no url= part does not raise it. The message gives the resolved target.

What it does to a shared link

The API's checks report this page's own tags and do not follow the refresh. A crawler that does not follow it builds the card from this page's own tags.

How to fix it

  1. Replace the meta refresh with a server-side redirect: respond with status 301 or 308 and a Location header giving the destination URL.
  2. If the page has to stay, give it its own og:title, og:description and og:image tags.
  3. Run the preview on the destination URL directly to check its card.
<!-- raises the check --> <meta http-equiv="refresh" content="0;url=https://example.com/new-page/"> <!-- a page that stays gives its own card --> <meta property="og:title" content="Example title"> <meta property="og:description" content="Example description."> <meta property="og:image" content="https://example.com/card.png">

Related checks