Zum Inhalt springen

Redirect Checker JSON-API

Prüfe Weiterleitungen aus Skripten, Monitoring oder deiner CI-Pipeline. Kostenlos, ohne API-Key.

GET https://redirect-tester.com/api.php?url=example.com&ua=googlebot

JSON-API für den Redirect-Checker

Die JSON-API liefert dir dasselbe Ergebnis wie der Redirect-Checker, nur maschinenlesbar – für Skripte, Monitoring und CI-Pipelines. Sie ist kostenlos und kommt ohne API-Key und ohne Registrierung aus.

GET https://redirect-tester.com/api.php?url=example.com&ua=googlebot

Parameter

ParameterPflichtBeschreibung
urljaDie Domain oder URL, die geprüft werden soll. Fehlt das Schema, wird http:// ergänzt – aus example.com wird also http://example.com. Enthält der Wert & oder ?, musst du ihn URL-kodieren.
uaneinUser-Agent: default, chrome (Chrome Desktop), mobile (Safari iPhone) oder googlebot. Standard: default.

Antwort

{
    "url": "http://example.com",
    "ua": "default",
    "result": {
        "hops": [
            { "url": "http://example.com", "status": 301, "time": 45, "type": "http", "error": null },
            { "url": "https://example.com/", "status": 200, "time": 120, "type": "http", "error": null }
        ],
        "error": null,
        "hints": [
            { "level": "info", "code": "hint.no_hsts", "text": "No Strict-Transport-Security (HSTS) header on the final URL." }
        ]
    },
    "error": null
}
  • result.hops enthält alle Anfragen der Reihe nach. Der letzte Eintrag ist die finale URL.
    • status: der HTTP-Statuscode – oder null, wenn die Anfrage gescheitert ist (Timeout, DNS- oder TLS-Fehler). Dann steht der Grund in error.
    • time: Antwortzeit in Millisekunden.
    • type: http für eine normale HTTP-Antwort, meta, wenn diese Seite per Meta-Refresh weitergeleitet hat.
  • result.error ist gesetzt, wenn die Prüfung abgebrochen wurde: bei einer Redirect-Schleife oder nach mehr als 10 Hops.
  • result.hints enthält die Auswertung. level ist error, warning, info oder success. code ist ein stabiler Schlüssel, auf den du dich in deinem Code verlassen kannst: hint.final_error, hint.missing_location, hint.chain, hint.temporary, hint.meta_refresh, hint.no_https, hint.no_hsts, hint.ok. text ist eine lesbare Erklärung.
  • error auf oberster Ebene ist gesetzt, wenn die Anfrage nicht verarbeitet werden konnte. result ist dann null.

Alle Texte in text und error sind englisch. Werte sie nicht per Textvergleich aus, sondern nutze code und die Statuscodes.

HTTP-Statuscodes der API

StatusBedeutung
200Die Prüfung wurde durchgeführt. Das gilt auch, wenn die geprüfte URL einen Fehler wie 404 liefert oder nicht erreichbar ist – schau dir dafür die Hops an.
400Der Parameter url fehlt.
422Die URL ist ungültig oder nicht erlaubt.
429Rate-Limit überschritten. Warte ein paar Minuten, bevor du weitere Anfragen schickst.

Limits

Jede Anfrage zählt als eine Prüfung. Das Limit liegt bei 60 Prüfungen pro IP-Adresse in 10 Minuten und gilt gemeinsam mit den Checkern auf der Website. CORS ist nicht aktiviert: Browser blockieren Aufrufe aus JavaScript auf anderen Websites. Ruf die API stattdessen von Servern, Skripten oder CI-Jobs aus auf.

Beispiele

curl

curl "https://redirect-tester.com/api.php?url=example.com&ua=googlebot"

curl und jq

# Statuscode der finalen URL
curl -s "https://redirect-tester.com/api.php?url=example.com" | jq '.result.hops[-1].status'

# Die ganze Kette, ein Hop pro Zeile
curl -s "https://redirect-tester.com/api.php?url=example.com" | jq -r '.result.hops[] | "\(.status) \(.url)"'

# Nur die Hint-Codes
curl -s "https://redirect-tester.com/api.php?url=example.com" | jq -r '.result.hints[].code'

PHP

<?php
$api = 'https://redirect-tester.com/api.php?' . http_build_query(['url' => 'example.com', 'ua' => 'googlebot']);
// ignore_errors: auch den JSON-Body von 4xx-Antworten lesen
$context = stream_context_create(['http' => ['ignore_errors' => true, 'timeout' => 30]]);
$data = json_decode(file_get_contents($api, false, $context), true, 512, JSON_THROW_ON_ERROR);

if ($data['error'] !== null) {
    exit('API-Fehler: ' . $data['error'] . PHP_EOL);
}
$hops = $data['result']['hops'];
$final = end($hops);
printf("%d Hop(s), finaler Status %s: %s\n", count($hops), $final['status'] ?? 'fehlgeschlagen', $final['url']);
foreach ($data['result']['hints'] as $hint) {
    echo "[{$hint['level']}] {$hint['code']}\n";
}

JavaScript (Node.js 18+)

const params = new URLSearchParams({ url: 'example.com', ua: 'chrome' });
const res = await fetch(`https://redirect-tester.com/api.php?${params}`);
const data = await res.json();
if (!res.ok) {
    throw new Error(`API ${res.status}: ${data.error}`);
}
const { hops, hints } = data.result;
console.log(hops.map((hop) => hop.status ?? 'fehlgeschlagen').join(' -> '));
console.log('Finale URL:', hops.at(-1).url);
console.log('Hinweise:', hints.map((hint) => hint.code));

CI-Check: Abbruch, wenn der finale Status nicht 200 ist

Dieses Shell-Skript prüft eine Liste von URLs, etwa nach einem Deployment oder einem Domainumzug, und bricht mit Fehler ab, sobald eine davon nicht auf 200 endet:

#!/bin/sh
set -eu

for url in example.com www.example.com http://example.com/alte-seite; do
    status=$(curl -fsS -G "https://redirect-tester.com/api.php" --data-urlencode "url=$url" \
        | jq -r '.result.hops[-1].status')
    if [ "$status" != "200" ]; then
        echo "FAIL $url: finaler Status $status" >&2
        exit 1
    fi
    echo "OK   $url"
done

Dank curl -f schlägt das Skript auch fehl, wenn die API selbst mit 4xx antwortet – zum Beispiel, weil das Rate-Limit erreicht ist. Halt die Liste also so kurz, dass du unter 60 Prüfungen in 10 Minuten bleibst. Für einmalige Listen ist der Bulk-Redirect-Checker der schnellere Weg.

Häufige Fragen

Brauche ich einen API-Key?

Nein. Die API ist kostenlos und funktioniert ohne Registrierung und ohne API-Key. Damit sie für alle verfügbar bleibt, sind pro IP-Adresse 60 Prüfungen in 10 Minuten möglich. Überschreitest du das, bekommst du HTTP 429, bis das Zeitfenster abgelaufen ist.

Warum kann ich die API nicht aus dem JavaScript meiner Website aufrufen?

Die API sendet keine CORS-Header, deshalb blockieren Browser Anfragen von fremden Origins. Ruf sie stattdessen von deinem Server, einem Skript, einem Cronjob oder einer CI-Pipeline aus auf. Node.js, PHP, curl und andere serverseitige Clients sind von CORS nicht betroffen.

Die API liefert 200, aber die URL ist kaputt. Ist das ein Fehler?

Nein. HTTP 200 heißt nur, dass die Prüfung selbst geklappt hat. Das Ergebnis der geprüften URL steht in result.hops: Schau dir den status des letzten Hops an, result.error für Schleifen oder zu viele Hops und die hints, etwa hint.final_error. Was die einzelnen Statuscodes bedeuten, erklärt die Übersicht der HTTP-Statuscodes.

Weitere kostenlose Tools

  • Bulk-Checker

    Prüfe bis zu 20 URLs auf einmal, z. B. deine Redirect-Map nach einem Domain-Umzug. Mit CSV-Export.

  • Header-Checker

    Alle HTTP-Response-Header jedes Hops, inklusive Location, Cache-Control und HSTS.

  • .htaccess-Redirect-Generator

    Erzeuge .htaccess-Regeln für einzelne Seiten, HTTPS- und www-Weiterleitungen.

  • nginx-Redirect-Generator

    Erzeuge nginx-Server-Blöcke und return-Regeln für deine Weiterleitungen.

  • HTTP-Statuscodes

    Alle HTTP-Statuscodes erklärt, mit Hinweisen, wie Google sie behandelt.