Skip to content

Rule · SEO

Redirect done with meta refresh or JavaScript

seo/client-redirectwarnvoid seoupdated

Why it matters

Crawlers that don't run JavaScript stay on the original URL, and Google treats meta refresh/JS redirects as weaker signals than HTTP redirects.

How to fix it

Redirect on the server: redirects() in next.config, redirect()/permanentRedirect() in a Server Component before any Suspense boundary, or a proxy rewrite.

Example

tsx
// app/old/page.tsx — server-side, status is a real 308
import { permanentRedirect } from 'next/navigation'
export default function Page() { permanentRedirect('/new') }

References

void seo reports 60 rules in this category. What search engines need from the raw response: status codes, titles and descriptions in <head>, self-referencing canonicals, one h1, crawlable links, Open Graph, icons, robots.txt and a sitemap with real dates.