Start · Sprachen · JavaScript · Referenz · PerformanceNavigationTiming.redirectCount

PerformanceNavigationTiming.redirectCount

Eigenschaft

Schreibgeschützte Zahl mit der Anzahl der Weiterleitungen seit der letzten Navigation ohne Weiterleitung im aktuellen Browsing-Kontext.

seit JavaScript Baseline: alle modernen Browser (Chrome 57+, Firef Kategorie: webapi

Signatur

PerformanceNavigationTiming.redirectCount

Beschreibung

Die schreibgeschützte Eigenschaft redirectCount eines PerformanceNavigationTiming-Eintrags gibt an, wie viele HTTP-Weiterleitungen (z. B. 301, 302, 307, 308) vor dem Laden des aktuellen Dokuments durchlaufen wurden. Gezählt wird ab der letzten Navigation ohne Weiterleitung im aktuellen Browsing-Kontext.

In der Praxis braucht man den Wert beim Real User Monitoring (RUM): Jede Weiterleitung kostet mindestens einen zusätzlichen Roundtrip und verzögert damit Time to First Byte und alle folgenden Messwerte. Mit redirectCount zusammen mit redirectStart und redirectEnd findet man unnötige Weiterleitungsketten, etwa http → https → www → /de/.

Den Eintrag bekommt man über performance.getEntriesByType("navigation")[0] oder über einen PerformanceObserver mit dem Typ "navigation". Die Eigenschaft ersetzt das veraltete performance.navigation.redirectCount aus Navigation Timing Level 1.

Rückgabewert

Typ
number
Beschreibung
Eine nicht-negative Ganzzahl mit der Anzahl der Weiterleitungen. Ist 0, wenn es keine Weiterleitung gab oder wenn mindestens eine Weiterleitung auf einen anderen Ursprung ging (Same-Origin-Regel).

Beispiele

Anzahl der Weiterleitungen auslesen

const [nav] = performance.getEntriesByType("navigation");

if (nav) {
  console.log(`Weiterleitungen: ${nav.redirectCount}`);
}
Weiterleitungen: 2

Weiterleitungskosten mit PerformanceObserver messen

const observer = new PerformanceObserver((list) => {
  for (const entry of list.getEntries()) {
    const redirectTime = entry.redirectEnd - entry.redirectStart;
    console.log({
      anzahl: entry.redirectCount,
      dauerMs: Math.round(redirectTime)
    });
  }
});

// buffered: true liefert auch den bereits erzeugten Navigationseintrag
observer.observe({ type: "navigation", buffered: true });
{ anzahl: 1, dauerMs: 142 }

RUM: Weiterleitungsketten an den Server melden

window.addEventListener("load", () => {
  const [nav] = performance.getEntriesByType("navigation");
  if (!nav || nav.redirectCount < 2) return;

  const payload = JSON.stringify({
    url: location.href,
    redirectCount: nav.redirectCount,
    redirectMs: nav.redirectEnd - nav.redirectStart,
    ttfb: nav.responseStart - nav.startTime
  });

  // sendBeacon funktioniert auch, wenn die Seite gleich verlassen wird
  navigator.sendBeacon("/rum/redirects", payload);
});

// Wichtig · Fallstricke

  • Same-Origin-Einschränkung: Ging irgendeine Weiterleitung der Kette auf einen anderen Ursprung (z. B. http:// → https:// oder eine andere Domain), ist der Wert aus Datenschutzgründen 0. Dann sind auch redirectStart und redirectEnd 0. Ein Wert von 0 heißt also nicht sicher, dass es keine Weiterleitung gab.
  • Gezählt werden nur HTTP-Weiterleitungen. Clientseitige Umleitungen per location.href, <meta http-equiv=\"refresh\"> oder SPA-Routing werden nicht erfasst.
  • Es gibt pro Dokument genau einen Navigationseintrag. Bei Navigationen innerhalb einer Single-Page-App ändert sich der Wert nicht.
  • Das veraltete performance.navigation.redirectCount ist als deprecated markiert und sollte nicht mehr verwendet werden.
  • Kompatibilität: wird von allen aktuellen Browsern unterstützt, in Safari erst ab Version 15. In Web Workern steht der Navigationseintrag nicht zur Verfügung.