Google
|
von Autom Team

google.com/goto: Location mit HEAD lesen

Google Search schreibt die Ziel-URL nicht mehr immer ins href des Treffers. Organische Ergebnisse zeigen auf https://www.google.com/goto?url=CAES…. Das ist nicht das alte google.com/url?q=…: der Parameter ist keine kodierte URL. Man dekodiert ihn nicht.

Google muss das Ziel trotzdem kennen. Es steht im HTTP-Header Location, wenn man /goto anfragt. Das ist die Lesart, die wir nutzen.

Beispiele in curl, Python und Node: github.com/automdev/google-goto-url-fix. Die Google-Search-API von Autom macht den Hop auf dem Server.

Rollout und Hintergrund: google.com/goto: Googles Anti-Scraping-Update.

Ein Satz

Redirect nicht folgen. Location lesen.

GET /goto?url=CAES…  HTTP/1.1
Host: www.google.com

HTTP/1.1 302 Found
Location: https://www.linkedin.com/in/satyanadella

HEAD holt nur Header. GET mit redirect: "manual" (oder allow_redirects=False) liest dasselbe. Google antwortet manchmal mit 402 (oder einem anderen Status) und Location: den Header auch dann lesen, wenn es kein 3xx ist.

curl

curl -sI --max-redirs 0 \
  -H 'Referer: https://www.google.com/search' \
  'https://www.google.com/goto?url=CAES...' \
  | grep -i '^location:'

-I ist HEAD. Ohne -L folgt curl nicht. Die Zeile Location: ist die echte URL.

Dieselbe Lesart mit GET:

curl -sD - -o /dev/null --max-redirs 0 \
  -H 'Referer: https://www.google.com/search' \
  'https://www.google.com/goto?url=CAES...' \
  | grep -i '^location:'

Python

import requests

goto = "https://www.google.com/goto?url=CAES..."
r = requests.head(
    goto,
    allow_redirects=False,
    headers={"Referer": "https://www.google.com/search"},
    timeout=10,
)
print(r.status_code, r.headers.get("Location"))

Wenn HEAD leer ist, mit GET ohne Follow erneut versuchen:

r = requests.get(goto, allow_redirects=False, timeout=10)
print(r.headers.get("Location"))

Node

const res = await fetch(goto, {
  method: "HEAD",
  redirect: "manual",
  headers: { Referer: "https://www.google.com/search" },
});
console.log(res.status, res.headers.get("location"));

Im Browser kann ein manuelles 3xx als opaqueredirect ankommen und den Header verstecken. In Node sind die Header sichtbar.

Warum nicht CAES dekodieren?

Das Blob ist kein öffentliches URL-Protobuf. Es ist eine undurchsichtige Referenz. Nur Google kennt das Ziel und schreibt es beim Hop in Location. Aus einem sichtbaren Namen ("LinkedIn · Satya Nadella") eine URL zu bauen, ist eine schlechte Idee.

Das href ist /goto. Die Seite kennt die URL trotzdem.

Google kann das Ziel nicht vollständig verstecken. Es braucht die echte URL, um die SERP zu zeichnen: sichtbare Domain, Favicon, Attributionsblock. Diese Werte stehen noch auf der Seite, meist in einem Datenskript am Ende, und in einem internen Store (W_jd), den das SERP-JavaScript liest.

Deshalb „reinigen“ sich die Links in manchen Browsern nach einer Mausbewegung: ein Skript liest W_jd und schreibt jedes /goto-href auf die echte URL um. Das gilt nur für organische Treffer unter #rso div[data-rpos] mit Attributionsblock. AI Overviews bleiben auf /goto. Es braucht eine live Seite und genau diese erste Mausbewegung. Ein headless Fetch des HTML löst das nicht aus. Chrome lässt die /goto-hrefs oft stehen.

Ein weiteres Leck sitzt am Link „Diese Seite übersetzen“. Passt die UI-Sprache nicht zur Ergebnissprache, fügt Google das Control ein, und die saubere URL steht oft darauf. Latein (Accept-Language: la) erscheint fast immer, weil kaum eine Seite auf Latein ist.

Das erklärt, was die Seite noch enthält. Es ist brüchig: Google kann W_jd umbenennen, das Skript ändern oder das Übersetzungs-Control streichen. Ein stabiles API-Feld gibt es dabei nicht.

Die belastbare Lesart bleibt Location auf /goto. Kein live DOM, kein Maus-Event, kein Sprachtrick.

Bei Autom

Die Google Search-API löst /goto bereits auf und gibt die finale URL in organic_results[].link zurück.

curl -s https://api.autom.dev/v1/google/search \
  -H "x-api-key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"linkedin.com/in satya nadella","gl":"us","hl":"en"}'

Code und README: github.com/automdev/google-goto-url-fix.

Weiterführende Artikel

1.000 kostenlose Anfragen auf Autom Pricing, API-Key auf app.autom.dev/register.

SERP API

Discover why Autom is the preferred API provider for developers.