Zum Inhalt springen

Weiterleitungen bei Vercel und Netlify

Bei Vercel und Netlify fasst du keine Webserver-Konfiguration an. Weiterleitungen stehen in einer Datei in deinem Repository oder im Dashboard, und das Edge-Netzwerk der Plattform liefert sie aus. So funktionieren beide – und hier unterscheiden sie sich.

Auf einen Blick

VercelNetlify
Konfigurationsdateivercel.json_redirects oder netlify.toml
Standard-Status308 (permanent ist standardmäßig true)301
Parameter:slug, :path*, Regex:platzhalter, * mit :splat
Vorhandene DateienRedirects werden vor dem Dateisystem geprüftVorhandene Dateien gewinnen, außer du erzwingst die Regel mit !
Domain-WeiterleitungenProject Settings → Domainswww/Apex automatisch, Aliase per Regel

Vercel: Weiterleitungen in der vercel.json

Die vercel.json liegt im Hauptverzeichnis deines Projekts. Jeder Eintrag braucht eine source und eine destination:

{
  "redirects": [
    { "source": "/ueber-uns", "destination": "/about" },
    { "source": "/blog/:slug", "destination": "/news/:slug", "permanent": true },
    { "source": "/docs/:path*", "destination": "https://docs.example.com/:path*" },
    { "source": "/sale", "destination": "/angebote", "permanent": false },
    { "source": "/legacy", "destination": "/", "statusCode": 301 }
  ]
}
  • permanent ist optional und standardmäßig true – das ergibt einen 308. Mit false bekommst du einen 307.
  • Mit statusCode legst du den Code ausdrücklich fest (301, 302, 303, 307 oder 308). Nutz das statt permanent.
  • :slug passt auf genau ein Pfadsegment, :path* auf beliebig viele. Reguläre Ausdrücke gehen auch, etwa "/post/:id(\\d+)".
  • Mit has und missing prüfst du Host, Header, Cookies oder Query-Parameter.

Einen Host leitest du in der vercel.json zum Beispiel so um:

{
  "redirects": [
    {
      "source": "/:path*",
      "has": [{ "type": "host", "value": "alt.example.com" }],
      "destination": "https://example.com/:path*",
      "permanent": true
    }
  ]
}

Deployst du eine Next.js-App, kannst du dieselben Regeln auch in redirects() in der next.config.js anlegen, siehe Next.js-Ratgeber. Pflege sie aber nur an einer Stelle. Vercel begrenzt die Zahl der Routen in der vercel.json; für sehr lange Listen schau dir die Bulk-Redirect-Optionen in der Vercel-Dokumentation an oder nutz eine Middleware mit Nachschlagetabelle.

Versteckte Weiterleitungen bei Vercel

Zwei Optionen in der vercel.json erzeugen Redirects ohne eigene Regel:

{
  "cleanUrls": true,
  "trailingSlash": false
}

cleanUrls: true liefert /about.html unter /about aus und leitet die .html-Variante per 308 weiter. trailingSlash bestimmt, ob /about/ auf /about umgeleitet wird (false) oder umgekehrt (true). Zeigen deine eigenen Regeln auf die jeweils andere Schreibweise, kommt ein zusätzlicher Sprung dazu.

Vercel: Domain-Weiterleitungen im Dashboard

Für www/ohne www oder eine alte Domain brauchst du keinen Code. Füg beide Domains unter Project → Settings → Domains hinzu, bearbeite die Domain, die weiterleiten soll, und wähl Redirect to mit deiner Hauptdomain. Den Statuscode kannst du auswählen; für einen dauerhaften Umzug nimm 301 oder 308. Pfad und Query-String bleiben erhalten, www.example.com/preise?plan=pro landet also auf example.com/preise?plan=pro. Die Weiterleitung von HTTP auf HTTPS übernimmt Vercel automatisch mit einem 308.

Netlify: die Datei _redirects

Die Datei _redirects muss nach dem Build im Publish-Verzeichnis liegen. Bei vielen Frameworks legst du sie deshalb in public/ oder static/ ab, damit sie mitkopiert wird. Jede Zeile folgt dem Muster von nach [status][!]:

# Einzelne Seite, 301 ist der Standard
/ueber-uns           /about

# Statuscode ausdrücklich angeben
/sale                /angebote           302
/alter-feed          /feed.xml           301

# Platzhalter
/news/:jahr/:monat/:slug   /blog/:slug   301

# Splat: alles unterhalb von /blog/ behält seinen Restpfad
/blog/*              /artikel/:splat     301

# Query-Parameter
/store id=:id        /produkte/:id       301

# Alte Domain auf neue Domain, erzwungen
https://alt.example.com/*   https://example.com/:splat   301!

# Rewrite (URL bleibt gleich) und eigene 404-Seite
/api/*               https://api.example.com/:splat   200
/*                   /404.html           404

Netlify liest die Regeln von oben nach unten und nimmt den ersten Treffer. Spezielle Regeln gehören also nach oben, Sammelregeln wie /* ans Ende. Der Status 200 ist übrigens kein Redirect, sondern ein Rewrite: Der Besucher bleibt auf der ursprünglichen URL.

Shadowing und Erzwingen mit „!“

Standardmäßig wird eine Regel ignoriert, wenn unter dem angefragten Pfad eine Datei existiert. Das nennt sich Shadowing. Liegt /ueber-uns/index.html noch in deinem Build, greift die Regel /ueber-uns /about nie. Du hast zwei Möglichkeiten: Lösch die alte Datei oder erzwing die Regel mit einem Ausrufezeichen:

/ueber-uns   /about   301!

Setz das Erzwingen bewusst ein. Ein erzwungenes /* /index.html 200! für eine Single-Page-App würde auch deine CSS- und JavaScript-Dateien umschreiben.

Netlify: Weiterleitungen in der netlify.toml

Dieselben Regeln kannst du auch in die netlify.toml im Hauptverzeichnis des Repositorys schreiben. Die Syntax ist ausführlicher, dafür hast du Build-Einstellungen und Weiterleitungen an einem Ort:

[[redirects]]
  from = "/blog/*"
  to = "/artikel/:splat"
  status = 301

[[redirects]]
  from = "/ueber-uns"
  to = "/about"
  status = 301
  force = true

[[redirects]]
  from = "/shop/*"
  to = "/de/shop/:splat"
  status = 302
  conditions = {Country = ["de", "at"]}

Nutzt du beide Dateien, verarbeitet Netlify zuerst die Regeln aus _redirects und danach die aus der netlify.toml. force = true entspricht dem !. Über conditions kannst du nach Land, Sprache, Rolle oder vorhandenem Cookie weiterleiten. Geh damit aus SEO-Sicht sparsam um: Der Googlebot crawlt überwiegend von US-Adressen aus und sieht dann immer nur eine Variante.

Domains bei Netlify

Legst du eine primäre Domain fest, leitet Netlify das Gegenstück mit oder ohne www automatisch dorthin weiter – und sobald ein Zertifikat aktiv ist, auch HTTP auf HTTPS. Weitere Domain-Aliase liefern dagegen standardmäßig einfach denselben Inhalt aus. Um einen Alias wie deine alte Domain weiterzuleiten, schreib eine erzwungene Regel mit vollständiger URL, wie im Beispiel https://alt.example.com/* oben.

Welchen Statuscode solltest du nehmen?

  • Dauerhaft umgezogen: 301 oder 308. Beide vererben PageRank und sind für Google ein starkes Signal, das Ziel zu indexieren.
  • Vorübergehend: 302 oder 307, etwa für eine Aktionsseite oder während einer Wartung.
  • Ersatzlos entfernt: keine Weiterleitung, sondern 404 oder 410. Leitest du alles auf die Startseite um, wertet Google das als Soft 404.

Die Details findest du unter 301 vs. 302 und 307 vs. 308.

Nach dem Deployment testen

Beide Plattformen führen Weiterleitungen am Edge aus, dein lokaler Dev-Server zeigt sie also womöglich gar nicht. Prüf nach jedem Deployment ein paar URLs mit dem Redirect-Checker: Du willst genau einen Sprung mit dem erwarteten Statuscode sehen. Achte auf zusätzliche Sprünge durch Slashes am Ende oder die www-Weiterleitung. Für lange Listen alter URLs spart dir der Bulk-Checker Zeit. Ziehst du eine komplette Domain um, hilft dir die Checkliste zum Domain-Umzug.

Häufige Fragen

Warum sendet Vercel 308 statt 301?

In der vercel.json ist permanent standardmäßig true, und das bedeutet 308. Das ist die dauerhafte Weiterleitung, bei der die Anfragemethode erhalten bleibt; Google behandelt sie wie einen 301. Brauchst du einen 301, setz "statusCode": 301.

Warum ignoriert Netlify meine Weiterleitung?

Meist existiert unter dem alten Pfad noch eine Datei (Shadowing), oder die _redirects liegt nach dem Build nicht im Publish-Verzeichnis. Lösch die alte Datei oder erzwing die Regel mit 301!. Prüf außerdem, ob eine weiter oben stehende Regel schon vorher greift.

Was bedeutet :splat bei Netlify?

:splat setzt ein, was das * in der Quelle erfasst hat. /blog/* /artikel/:splat 301 leitet /blog/2024/beitrag auf /artikel/2024/beitrag weiter.

Ist eine 200-Regel bei Netlify eine Weiterleitung?

Nein, das ist ein Rewrite (Proxy). Die URL im Browser bleibt gleich, der Inhalt kommt vom Ziel. Suchmaschinen indexieren die ursprüngliche URL.

  • .htaccess-Weiterleitung auf Apache

    So leitest du einzelne Seiten und ganze Domains per .htaccess weiter: mod_alias oder mod_rewrite, fertige Regeln für die typischen Fälle und wie du Schleifen und Ketten vermeidest.

  • Weiterleitungen mit nginx

    Fertige nginx-Konfiguration für 301-Weiterleitungen: einzelne Seiten, Muster, ganze Domains, HTTPS und www in einem Hop und Hunderte URLs per map.

  • Weiterleitungen mit Cloudflare

    Cloudflare kann Weiterleitungen direkt am Edge beantworten, bevor eine Anfrage deinen Server erreicht. So funktionieren Single Redirects, Bulk Redirects und Always Use HTTPS – und so verhinderst du, dass sie sich mit deinem Server in die Quere kommen.

  • Weiterleitungen in WordPress

    In WordPress kannst du URLs auf mehreren Wegen weiterleiten: per Plugin, per Regel in der .htaccess oder mit ein paar Zeilen PHP. Hier erfährst du, welcher Weg wann passt und wie du die typischen Stolperfallen mit Caching und HTTPS umgehst.

  • Weiterleitungen in Next.js

    In Next.js kannst du an vier Stellen weiterleiten: in der Konfiguration, in der Middleware, im Servercode des App Routers und über die Option trailingSlash. Jede davon sendet standardmäßig andere Statuscodes – es lohnt sich also, die Unterschiede zu kennen.

  • Weiterleitungen mit Microsoft IIS

    IIS bietet dir zwei Wege für Weiterleitungen: die eingebaute HTTP-Umleitung und das URL-Rewrite-Modul. Hier erfährst du, wann du welches nimmst – mit web.config-Beispielen zum Kopieren.