Zum Inhalt springen

Glossar User Agent

Was ist ein User Agent?

  • Technisches SEO
Definition

Ein User Agent ist das Client-Programm, das eine Anfrage an einen Webserver stellt: ein Browser, ein Crawler, eine App oder ein Kommandozeilenwerkzeug. Der Begriff meint auch den Text, mit dem sich dieses Programm im HTTP-Header User-Agent vorstellt, zum Beispiel „Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/157.0.0.0 Safari/537.36“. Die geltende Norm RFC 9110 definiert beides.

Links ein Browserfenster, ein Telefon und ein Punktenetz; jedes schickt auf einem gepunkteten Weg ein Namensschild zu einem Server rechts, das Schild des Punktenetzes ist orange, eine orange Lupe liegt darauf, auf dunkelblauem Grund.
Auf dieser Seite 14
  1. Herkunft des Begriffs
  2. Geschichte und Entwicklung
  3. Wie es funktioniert
  4. Arten und Varianten
  5. Beispiele
  6. Wie man es misst
  7. Vor- und Nachteile
  8. Abgrenzung zu verwandten Begriffen
  9. Werkzeuge
  10. Kritik und Grenzen
  11. So gehst du Schritt für Schritt vor
  12. Best Practices
  13. Häufige Fehler
  14. Wie dieser Eintrag entstanden ist
Kurz gefasst

Ein User Agent ist das Programm, das eine Seite anfragt, und der Text, mit dem es sich vorstellt. Aufbau des Strings, Client Hints und richtiger Umgang.

Links ein Browserfenster, ein Telefon und ein Punktenetz; jedes schickt auf einem gepunkteten Weg ein Namensschild zu einem Server rechts, das Schild des Punktenetzes ist orange, eine orange Lupe liegt darauf, auf dunkelblauem Grund.

Herkunft des Begriffs

Der Ausdruck stammt aus den HTTP-Spezifikationen. RFC 1945 vom Mai 1996 definiert den User Agent als „den Client, der eine Anfrage auslöst“, und nennt Browser, Editoren, Spider (Roboter, die das Web durchlaufen) und andere Werkzeuge. RFC 9110 ergänzt, dass Browser nur einen kleinen Teil ausmachen: Auch mobile Apps, Haushaltsgeräte und Skripte für Firmware-Updates sind User Agents.

Fast jeder Browser beginnt seinen String mit „Mozilla/5.0“. MDN führt das auf „historische Gründe“ zurück. Der HTML-Standard bewahrt dasselbe Erbe in JavaScript: navigator.appCodeName liefert immer „Mozilla“ und navigator.appName „Netscape“, damit bestehende Websites weiter funktionieren. Bei den Namen der Engines lief es ähnlich. Laut MDN haben viele Browser die Namen anderer Engines übernommen, damit Websites sie nicht wegen des Namens aussperren. Deshalb schreibt Chrome „KHTML, like Gecko“ und „Safari“, obwohl es keins von beiden ist. RFC 9110 rät davon ab, weil es den Zweck des Felds aushebelt.

Geschichte und Entwicklung

  • Mai 1996: RFC 1945 (HTTP/1.0) führt den Header User-Agent ein. Clients sollen ihn senden, Pflicht ist er nicht.
  • Juni 1999: RFC 2616 (HTTP/1.1) behält ihn in Abschnitt 14.43, mit demselben Beispiel „CERN-LineMode/2.15 libwww/2.17b3“.
  • Juni 2014: RFC 7231 ergänzt eine Warnung: Lange, detaillierte Strings erhöhen das Risiko, dass jemand gegen seinen Willen wiedererkannt wird, das sogenannte Fingerprinting.
  • Juni 2022: RFC 9110 löst RFC 7231 ab und ist die geltende Norm. Ein User Agent soll den Header in jeder Anfrage senden.
  • 13. Juni 2022: Chrome 101 erreicht laut Chromium-Zeitplan 100 % der Nutzer mit Nebenversionen, die auf 0.0.0 eingefroren sind.
  • 7. Februar 2023: Chrome 107 schließt den reduzierten String auf dem Desktop ab.
  • 11. Mai 2023: Chrome 110 schließt den reduzierten String unter Android ab.
  • 26. Oktober 2026: jüngste Fassung des Entwurfs User-Agent Client Hints der Community Group WICG, kein W3C-Standard.

Wie es funktioniert

Der Browser sendet den Header User-Agent mit jeder HTTP-Anfrage. Nach RFC 9110 besteht der Wert aus einem oder mehreren Produkten, jedes mit Namen und optionaler Version (Produkt/Version), gefolgt von Kommentaren in Klammern. Die Produkte stehen nach absteigender Bedeutung für die Erkennung des Programms. Werbung im Produktnamen verbietet die Norm.

Chromes String unter Windows, am 15.11.2026 in unserem eigenen Browser ausgelesen, zerfällt so:

TeilBeispielWas es heißt
Historisches ProduktMozilla/5.0Senden fast alle Browser aus historischen Gründen
Plattform(Windows NT 10.0; Win64; x64)Betriebssystem; in Chrome ein fester Wert je Plattform
EngineAppleWebKit/537.36 (KHTML, like Gecko)Erbe früherer Engines, damit Websites ihn nicht ausschließen
BrowserChrome/157.0.0.0Hauptversion; die letzten drei Zahlen sind eingefroren
KompatibilitätSafari/537.36Chrome gibt sich zusätzlich als Safari aus

Quelle: navigator.userAgent in Chrome 157 (15.11.2026); MDN, „User-Agent header“; Chromium, „User-Agent Reduction“.

RFC 9110 nennt drei Zwecke des Strings: Kompatibilitätsprobleme eingrenzen, die Antwort an einen Client anpassen und Statistiken zu Browsern und Betriebssystemen erstellen. Ändert sich die Antwort je nach User Agent, sollte der Server das mit dem Header Vary anzeigen. RFC 9110 verbietet Caches, eine Antwort für eine andere Anfrage wiederzuverwenden, wenn die in Vary genannten Header nicht übereinstimmen. Ohne „Vary: User-Agent“ kann ein Cache oder ein CDN die Mobilfassung an einen Desktop-Rechner ausliefern oder umgekehrt. Google nennt diesen Aufbau, dieselbe URL mit anderem HTML je Gerät, „dynamic serving“ und stützt ihn auf das Auslesen des User Agents und „Vary: user-agent“.

Arten und Varianten

Heute kommt der User Agent in zwei Formen: als klassischer String, den Chrome gekürzt hat, und als User-Agent Client Hints, eigene Header, die dieselben Daten stückweise liefern.

Der Grund ist der Datenschutz. Der WICG-Entwurf stellt Client Hints als Weg vor, Inhalte anzupassen, ohne die Angriffsfläche für passives Fingerprinting, die der Header User-Agent bietet. Chrome hat die genauesten Teile des Strings in drei Phasen eingefroren: zuerst die Nebenversionen (Chrome 101), dann den Desktop-String (Chrome 107) und zuletzt den Android-String (Chrome 110). Laut Chromium wird die Plattform dabei zu einem festen Wert: unter Android „Linux; Android 10; K“, auch wenn System oder Handy andere sind.

HeaderWas er sagtWann er kommt
Sec-CH-UAMarken des Browsers und HauptversionStandardmäßig
Sec-CH-UA-MobileOb es ein Mobilgerät ist (?1) oder nicht (?0)Standardmäßig
Sec-CH-UA-PlatformBetriebssystem, zum Beispiel „Windows“Standardmäßig
Sec-CH-UA-Platform-Version, -Model, -Full-Version-ListSystemversion, Modell, volle VersionNur, wenn der Server sie mit Accept-CH anfordert

Quelle: WICG, „User-Agent Client Hints“, 26.10.2026; Chrome for Developers, „User-Agent Client Hints“.

Die ersten drei gelten als niedrig in der Entropie und kommen standardmäßig. Für die übrigen antwortet der Server mit Accept-CH, und der Browser hängt sie an die folgenden Anfragen. Chrome sendet Client Hints nur über HTTPS. In JavaScript liest du sie mit navigator.userAgentData und getHighEntropyValues(). In der Markenliste unseres Chrome 157 steht eine fiktive Marke, „Not-A.Brand“: Der WICG-Entwurf schlägt solche falschen Einträge vor (GREASE), damit Websites nicht nach einem genauen Namen suchen.

Chrome schaltet Client Hints seit Version 89 standardmäßig ein. Laut den Kompatibilitätsdaten von MDN (15.11.2026) unterstützen Firefox und Safari navigator.userAgentData nicht, und MDN führt die API als experimentell.

Beispiele

Safari auf dem iPhone, laut MDN: „Mozilla/5.0 (iPhone; CPU iPhone OS 18_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Mobile/15E148 Safari/604.1“. Laut MDN nennt Safari seine Version mit „Version/“, hier 26.0, und ergänzt auf dem iPhone „Mobile“. MDN weist außerdem darauf hin, dass Firefox, Chrome und Edge auf dem iPhone ebenfalls auf WebKit laufen, ihre Strings ähneln deshalb dem von Safari.

Firefox unter macOS, laut MDN: „Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:138.0) Gecko/20100101 Firefox/138.0“. „rv:138.0“ ist die Version der Engine Gecko, „20100101“ ein fester Wert auf dem Desktop.

curl, das Kommandozeilenwerkzeug: Laut Handbuch sendet es standardmäßig „curl/VERSION“, etwa „curl/8.23.1“. Das ist ein User Agent ohne Browser dahinter.

Googlebot Smartphone, laut Googles Doku vom 30.10.2026: „Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/W.X.Y.Z Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)“. W.X.Y.Z ist ein Platzhalter, den Google mit der jeweils genutzten Chrome-Version füllt.

Nach welchem Wort suchst du in deinen Logs?

Wie man es misst

In den Server-Logs steht der User Agent in jeder Zeile. Das Format „combined“ speichert ihn bei Apache mit %{User-agent}i und bei nginx mit $http_user_agent, eine gewöhnliche Logzeile sagt also schon, welches Programm welche URL angefragt hat. Die Logfile-Analyse setzt dort an, um Besuche von Menschen und von Crawlern zu trennen. Für Googlebot rät Google, beim Filtern Platzhalter für die Chrome-Version zu nutzen, weil sich diese Zahl mit der Zeit ändert.

Vor- und Nachteile

Vorteile: Er kommt mit jeder Anfrage, ohne JavaScript, und jeder Server kann ihn protokollieren. Er taugt für Statistiken nach Browser oder Betriebssystem und um Fehler in einer Version einzugrenzen.

Nachteile: Der Client schreibt ihn selbst, er beweist also nichts. In Chrome nennt er weder die genaue Version noch das Handymodell. Sein Format ist uneinheitlich, warnt MDN, und manche Browser machen widersprüchliche Angaben: Chrome nennt sich Chrome und Safari zugleich.

Abgrenzung zu verwandten Begriffen

Auch Crawler stellen sich mit einem User Agent vor, aber robots.txt arbeitet nicht mit diesem String. Nach RFC 9309 hat jeder Crawler ein kurzes Token, das in seinem String vorkommen sollte, und die Regeln in der robots.txt werden mit diesem Token geschrieben: „Googlebot“, nicht der ganze String von oben. Weil sich der String kopieren lässt, beweist der Name nicht, wer anfragt: Wie du einen echten Besuch prüfst, steht unter Googlebot, die Strings von GPTBot, ClaudeBot oder PerplexityBot unter KI-Crawler.

AngabeWoher sie kommtWofür sie dient
String User-AgentVom Client, frei gewähltAntworten anpassen und Besuche protokollieren
User-Agent Client HintsVom Browser, stückweiseNur die nötigen Daten anfordern
Token in robots.txtVom Betreiber des CrawlersCrawl-Regeln schreiben
IP und Reverse DNSVon der Verbindung und dem Inhaber der IPPrüfen, wer die Anfrage stellt

Quelle: RFC 9110; RFC 9309; WICG, „User-Agent Client Hints“; Google, „Verify requests from Google crawlers and fetchers“.

Werkzeuge

Zum Zerlegen von Strings gibt es quelloffene Bibliotheken. Alphabetisch:

  • Device Detector (Matomo): erkennt laut Repository Browser, Betriebssystem, Geräteart, Marke und Modell; Lizenz LGPL-3.0.
  • UAParser.js: JavaScript-Bibliothek für Browser und Node, die laut Repository Browser, Betriebssysteme, Geräte und Bots erkennt; Lizenz AGPL-3.0.
  • uap-core: die Datei mit regulären Ausdrücken des Browserscope-Parsers, Grundlage für Portierungen in mehreren Sprachen.

Kritik und Grenzen

RFC 7231 warnte schon 2014, dass ein langer String hilft, eine Person gegen ihren Willen wiederzuerkennen (Fingerprinting). Der Entwurf zu Client Hints nennt denselben Grund.

Am String festzumachen, welche Funktionen man nutzt, geht ebenfalls schief. In MDNs Beispiel bricht ein Skript, das annimmt, jedes „Chrome“ beherrsche eine Funktion, bei älteren Versionen und bei Browsern, die sie später nachrüsten. MDN ergänzt, dass das Problem mit Client Hints dasselbe ist, und empfiehlt, die Funktion direkt zu prüfen (Feature Detection).

Und schließlich lässt sich der String fälschen. Google warnt, dass andere Crawler oft den User Agent von Googlebot übernehmen.

So gehst du Schritt für Schritt vor

  • Eigenen User Agent ansehen: Öffne die Entwicklertools des Browsers, Tab Netzwerk, und sieh dir den Header User-Agent einer beliebigen Anfrage an, oder gib navigator.userAgent in die Konsole ein.
  • Client Hints ansehen: In derselben Anfrage stehen Sec-CH-UA und die übrigen; in der Konsole navigator.userAgentData.
  • In Chrome ändern: Entwicklertools, Bereich Network conditions, unter User agent das Häkchen bei „Use browser default“ entfernen und einen anderen wählen oder eintippen. Laut Google ändert das, was die Website dir schickt, nicht, wie Chrome arbeitet.
  • In curl ändern: curl -A "Text". Mit -A "" sendet curl den Header gar nicht.
  • Den Schluss ziehen: Wenn das Ändern einen Klick kostet, taugt der String nicht als Ausweis.

Best Practices

  • Prüfe Funktionen per Feature Detection, nicht über den Browsernamen.
  • Hängt die Antwort von Gerät oder Browser ab, sende „Vary: User-Agent“.
  • Fordere mit Accept-CH nur die Client Hints an, die du auch nutzt.
  • Erkenne Bots über IP und Reverse DNS, nicht über den Namen, den sie angeben.
  • Filtere in Logs nach String und IP zugleich.

Häufige Fehler

  • Einen Crawler nur wegen seines User Agents sperren oder durchlassen.
  • Je Gerät anderes HTML ausliefern, ohne den Header Vary.
  • In Chrome die volle Version im String suchen: Seit Chrome 101 endet sie auf 0.0.0.
  • Logs nach einer exakten Googlebot-Version filtern statt mit Platzhaltern.
  • Gecko erkennen wollen, indem man nach „Gecko“ sucht, und so Chrome und Safari, die „like Gecko“ tragen, als Firefox zählen.

Wie dieser Eintrag entstanden ist

Wir haben diesen Eintrag im November 2026 mit Unterstützung von KI geschrieben. Die Angaben stammen aus den RFC-Normen der IETF, dem HTML-Standard, dem Entwurf User-Agent Client Hints, MDN, der Dokumentation von Chrome, Chromium und Google, den Handbüchern von curl, Apache und nginx und den genannten Repositorys. Wir haben ihn vor der Veröffentlichung geprüft, er enthält keine Kundendaten.

Manuel Riveiro Rodriguez CEO & Digital Strategist

Eine technische Prüfung sieht sich das und alles Weitere in einem Durchgang an.

Audit anfragen

Häufige Fragen

Wofür ist der User Agent da?

Er sagt dem Server, welches Programm die Seite anfragt. Damit passt der Server die Antwort an, grenzt Fehler eines bestimmten Browsers ein und erstellt Statistiken zu Browsern und Betriebssystemen.

Wo finde ich meinen User Agent?

In den Entwicklertools des Browsers, Tab Netzwerk, im Header User-Agent einer beliebigen Anfrage. Oder in der Konsole, wenn du navigator.userAgent eingibst.

Was ist ein User-Agent-String?

Der Text, den das Programm im Header User-Agent sendet, zum Beispiel der, der in Chrome mit „Mozilla/5.0“ beginnt und mit „Safari/537.36“ endet.

Kann man den User Agent fälschen?

Ja. Mit den Entwicklertools von Chrome, mit Erweiterungen oder mit curl lässt sich jeder beliebige Text senden. Deshalb sollte ein Server dem Namen, den ein Client angibt, nicht trauen.

Was bedeutet das Sternchen in der Zeile User-agent der robots.txt?

Dass die Regelgruppe für alle Crawler gilt, die keine eigene Gruppe haben. Nach RFC 9309 folgt ein Crawler ohne Gruppe mit seinem Namen der Gruppe mit dem Sternchen.

Quellen

  1. IETF, RFC 9110 „HTTP Semantics“, Juni 2022, Abschnitte 3.5 (user agent), 10.1.5 (User-Agent) und 12.5.5 (Vary) (englisch).
  2. IETF, RFC 1945 „Hypertext Transfer Protocol -- HTTP/1.0“, Mai 1996, Abschnitt 10.15 (englisch).
  3. IETF, RFC 2616 „Hypertext Transfer Protocol -- HTTP/1.1“, Juni 1999, Abschnitt 14.43 (englisch).
  4. IETF, RFC 7231 „HTTP/1.1: Semantics and Content“, Juni 2014, Abschnitt 5.5.3 (englisch).
  5. IETF, RFC 9309 „Robots Exclusion Protocol“, September 2022 (englisch).
  6. WHATWG, HTML Standard, Abschnitt „Client identification“ (englisch).
  7. WICG, „User-Agent Client Hints“, Draft Community Group Report, 26. Oktober 2026 (englisch).
  8. MDN, „User-Agent header“, geändert am 28. Oktober 2025 (englisch).
  9. MDN, „Browser detection using the user agent string (UA sniffing)“, geändert am 6. Januar 2026 (englisch).
  10. MDN, „Vary header“, geändert am 21. November 2025 (englisch).
  11. MDN, „User-Agent Client Hints API“, geändert am 12. November 2026, mit Kompatibilitätsdaten (englisch).
  12. Chrome for Developers, „Improving user privacy and developer experience with User-Agent Client Hints“ (englisch).
  13. Chromium, „User-Agent Reduction“, Phasen und Zeitplan (englisch).
  14. Chrome DevTools, „Network conditions: Override the user agent string“, aktualisiert am 24. Mai 2024 (englisch).
  15. Google, „Google's common crawlers“, aktualisiert am 30. Oktober 2026 (englisch).
  16. Google, „Verify requests from Google crawlers and fetchers“, aktualisiert am 20. März 2026 (englisch).
  17. Google Search Central, „Googlebot“, aktualisiert am 3. Februar 2026 (englisch).
  18. Google Search Central, „Mobile-first indexing best practices“, Abschnitt zu dynamic serving (englisch).
  19. curl, Handbuch, Option -A, --user-agent (englisch).
  20. Apache HTTP Server 2.4, „Log Files“, Combined Log Format (englisch).
  21. nginx, „Module ngx_http_log_module“, Format combined (englisch).
  22. Matomo, Device Detector, Repository (englisch).
  23. UAParser.js, Repository (englisch).
  24. uap-core, Repository (englisch).