Beste User Agents voor Web Scraping in 2026: Waarom Coherentie Wint

Er is geen magische user-agent string. In 2026 valideert detectie je hele identiteit - UA, Client Hints, TLS en IP samen. Eén coherente Chrome verslaat een lijst van duizend willekeurige UAs.

Zoek "beste user agent voor web scraping" en je vindt lijsten van duizend strings om te roteren. Dat advies is een decennium verouderd. In 2026 is het belangrijkste feit over user agents dat ze niet langer alleen worden beoordeeld - detectiesystemen controleren je User-Agent tegen je Client Hints, je TLS-handshake en je IP, en elke mismatch markeert je sneller dan een eenvoudige, eerlijke header zou doen. De beste user agent is geen slimme string; het is een actuele, echte browseridentiteit waar elke laag overeenkomt. Hier is hoe je dat bouwt, plus de strings om te gebruiken en de strings die je direct blokkeren.

Wat een user agent wel (en niet) doet

De User-Agent header is een tekstregel in elke HTTP-aanvraag die de browser, zijn versie en het besturingssysteem benoemt. Een typische Chrome-string ziet eruit als Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36. Sites lezen het om de juiste lay-out te serveren - en om bots te spotten. Een aanvraag die python-requests/2.28.1 of curl/7.68.0 adverteert, is een bot met een naamplaatje; het verdient directe blokkades, lege antwoorden of CAPTCHA-omleidingen. Maar het inwisselen van een echte browserstring is slechts stap één, want de UA is nu het minst vertrouwde signaal van meerdere.

Client Hints veranderden alles

Moderne Chrome heeft verminderd wat het in de User-Agent stopt (UA-reductie) en verplaatst de details naar een set headers genaamd Client Hints: Sec-CH-UA, Sec-CH-UA-Mobile en Sec-CH-UA-Platform. Dit is cruciaal voor scrapers. Detectie controleert nu of je UA en je Client Hints hetzelfde verhaal vertellen. Beweren dat je Chrome 144 op Windows bent in de UA terwijl je hints mobiele Safari zeggen, en je wordt direct geblokkeerd - een mismatch is een luider signaal dan een ontbrekende header. Dus de taak is niet om UAs te roteren; het is om een complete, intern consistente header set te leveren:

import requests

# One current Chrome identity - UA, Client Hints and Accept all agree
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                  "(KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36",
    "Sec-CH-UA": '"Chromium";v="144", "Google Chrome";v="144", "Not?A_Brand";v="24"',
    "Sec-CH-UA-Mobile": "?0",
    "Sec-CH-UA-Platform": '"Windows"',
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
}
r = requests.get("https://httpbin.org/headers", headers=headers, timeout=15)
print(r.json()["headers"]["User-Agent"])  # confirm the server saw what you sent
Twee-kolommen lijst van user agents om te gebruiken, zoals actuele Chrome en echte Firefox strings met bijpassende Client Hints, versus user agents om te vermijden zoals python-requests, HeadlessChrome en enorme incoherente rotatielijsten
Een actuele echte-browser string met bijpassende Client Hints verslaat elke keer een lijst van duizend willekeurige UAs.

De user agents die het waard zijn om te gebruiken in 2026

Omdat Chrome ongeveer 65% van de browsermarkt in handen heeft, mengen actuele Chrome-strings het beste in - ze zijn de veiligste standaard. Houd een kleine, frisse set in plaats van een gigantische verouderde:

En de strings die je direct markeren: standaard bibliotheek agents (python-requests, curl, Scrapy, urllib), headless identifiers (HeadlessChrome, PhantomJS), en misvormde of oude strings (een lege UA, een kale Mozilla/5.0, of MSIE 6.0). Houd versies altijd actueel - een Chrome-string van drie jaar oud is bijna net zo verdacht als helemaal geen string.

Waarom het roteren van duizend UAs averechts werkt

Het klassieke advies - verzamel duizend user agents en roteer er één per aanvraag - schaadt je nu actief, om twee redenen. Ten eerste zijn de meeste grote lijsten verouderd, dus je roteert door strings die er individueel verouderd uitzien. Ten tweede, en belangrijker, het roteren van alleen de UA laat elke andere laag constant: je TLS-vingerafdruk, je Client Hints, je IP en je aanvraagcadans veranderen niet met de string. Detectie ziet een enkele machine's TLS-handshake met veertig verschillende browsernamen - wat veel anomalischer is dan één eerlijke identiteit. Als je moet roteren, roteer dan de hele identiteit samen, en houd de pool klein en actueel:

import random

# A SMALL curated pool - each identity ships matching Client Hints
IDENTITIES = [
    {"ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36",
     "platform": '"Windows"', "mobile": "?0"},
    {"ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36",
     "platform": '"macOS"', "mobile": "?0"},
]

def headers_for(i):
    return {
        "User-Agent": i["ua"],
        "Sec-CH-UA-Platform": i["platform"],
        "Sec-CH-UA-Mobile": i["mobile"],
        "Accept-Language": "en-US,en;q=0.9",
    }

h = headers_for(random.choice(IDENTITIES))  # rotate identities, never UA alone
Vingerafdrukcoherentie stapel die laat zien dat de User-Agent, Client Hints, TLS JA3/JA4 vingerafdruk en IP allemaal dezelfde browser moeten beschrijven of de aanvraag wordt gemarkeerd
Detectie valideert de hele identiteit. Alleen de UA roteren laat de lagen eronder constant - een luider signaal, niet een stiller.

De laag onder de header: TLS en IP

Zelfs een perfecte header set kan verliezen van de handshake eronder. Python en Go onderhandelen TLS op een manier die niet overeenkomt met Chrome, wat een JA3/JA4 vingerafdruk produceert die de aanvraag verraadt, ongeacht wat de UA beweert - onze gids over JA3/JA4 TLS vingerafdrukken legt de mismatch uit. Dit is ook waarom dezelfde URL 200 kan retourneren in een browser en 403 van curl, behandeld in waarom curl 403 krijgt wanneer de browser werkt. De laatste laag is de IP: een coherente Chrome-vingerafdruk van een gemarkeerde datacenter IP faalt nog steeds. Koppel je headers met een vertrouwde residentiële exit en menselijke pacing - de volledige stack staat in onze anti-ban checklist, en de detectiesignalen in hoe websites proxies detecteren.

De praktische conclusie: besteed je inspanning aan frisheid en coherentie, niet aan de grootte van de lijst. Een dozijn actuele identiteiten, elk met bijpassende Client Hints en gekoppeld aan een echt browser TLS-profiel, zal beter presteren dan een geschraapte lijst van tienduizend strings. De grote lijst geeft je variëteit in het ene veld dat detectie nu het minst vertrouwt; coherentie geeft je geloofwaardigheid in al deze velden tegelijk.

Wanneer te stoppen met handmatig beheren van headers

Het actueel houden van UA-strings, het matchen van Client Hints, het afstemmen van de TLS-vingerafdruk en het roteren van vertrouwde IP's is een onderhoudsmolen. Bij harde doelen is het goedkoper om het hele vingerafdrukprobleem over te dragen aan een Scraper API die een echte, coherente browseridentiteit draagt - headers, Client Hints, TLS en IP samen - en deze bijwerkt naarmate browsers nieuwe versies uitbrengen. Jij stuurt een URL; het handelt de vermomming af.

Laat de Scraper API de volledige vingerafdruk afhandelen

Veelgestelde vragen

Wat is de beste user agent voor web scraping?

Een actuele, echte Chrome-string op een veelvoorkomend platform - Windows of macOS - up-to-date gehouden, omdat Chrome's ~65% marktaandeel betekent dat het het beste opgaat. Maar de string werkt alleen als je Client Hints, TLS-vingerafdruk en IP allemaal dezelfde browser beschrijven. Er is geen enkele magische string; coherentie is wat telt.

Voorkomt het roteren van user agents blokkades?

Niet op zichzelf. Het roteren van de UA terwijl je TLS-vingerafdruk, Client Hints en IP constant blijven is verdachter, niet minder - detectie ziet één machine met veel browsernamen. Roteer de hele identiteit samen, houd de pool klein en actueel, en koppel het met vertrouwde IP's en menselijke pacing.

Welke user agents moet ik vermijden?

Standaard bibliotheekstrings (python-requests, curl, Scrapy, urllib), headless identifiers (HeadlessChrome, PhantomJS), en alles wat misvormd of oud is - een lege UA, een kale Mozilla/5.0, of oude MSIE strings. Elk markeert je als geautomatiseerd voordat enig ander signaal wordt gecontroleerd.

Moet ik Client Hints sturen?

Voor moderne sites, ja. Chrome heeft browserdetails verplaatst naar Sec-CH-UA, Sec-CH-UA-Mobile en Sec-CH-UA-Platform, en detectie controleert deze tegen je User-Agent. Een UA zonder Client Hints of, erger nog, tegenstrijdige hints is een veelvoorkomende blokkeertrigger - stuur ze en houd ze consistent met je UA.

De beste user agent voor web scraping in 2026 is geen string die je kopieert van een lijst van duizend - het is een enkele actuele browseridentiteit waar de UA, Client Hints, TLS-vingerafdruk en IP allemaal overeenkomen. Krijg coherentie goed, roteer hele identiteiten in plaats van strings, en ondersteun het met een vertrouwde exit.

Scrapen met een coherente browseridentiteit, beheerd