유저 에이전트(User Agent, 사용자 에이전트)는 웹 브라우저, 검색엔진 크롤러, 앱처럼 사용자를 대신해 웹 서버에 요청을 보내는 프로그램이자, 그 프로그램이 매 요청의 User-Agent HTTP 헤더에 담아 보내는 자기 식별 문자열이다.
MDN은 유저 에이전트를 “사용자를 대표하는 컴퓨터 프로그램으로, 웹 맥락에선 브라우저를 의미”한다고 정의하고, 브라우저 외에 “웹 페이지를 스크랩하는 봇, 다운로드 관리자, 웹에 접근하는 다른 앱”도 유저 에이전트라고 설명한다 (MDN, 사용자 에이전트). 문자열에는 보통 브라우저 종류, 버전, 운영체제가 들어간다.
서버는 이 문자열을 보고 모바일 페이지를 줄지, 어떤 봇인지, 차단할지를 결정한다. SEO에서는 구글봇과 AI 크롤러를 식별하고 robots.txt 규칙을 적용하는 열쇠가 바로 유저 에이전트다.
형식은 제품/버전 (설명) 조각이 이어진 것이고, 브라우저는 Mozilla/5.0 (시스템 정보) 플랫폼 (플랫폼 상세) 확장 순서를 따른다 (MDN, User-Agent 헤더). 윈도우 크롬의 문자열을 조각으로 나누면 아래와 같다.
| 조각 | 예시 | 뜻 |
|---|---|---|
| 호환 표식 | Mozilla/5.0 | 모든 현대 브라우저가 붙이는 역사적 접두어. 실제 브라우저 정보가 아니다 |
| 시스템 정보 | (Windows NT 10.0; Win64; x64) | 운영체제와 아키텍처 |
| 렌더링 엔진 | AppleWebKit/537.36 (KHTML, like Gecko) | 크롬도 사파리와 호환을 주장하기 위해 WebKit과 Gecko를 함께 표기 |
| 브라우저 | Chrome/120.0.0.0 | 브라우저 이름과 버전 |
| 호환 표식 | Safari/537.36 | 사파리 전용 페이지를 받기 위한 꼬리표 |
모든 브라우저가 Mozilla/5.0으로 시작하는 이유는 1990년대 서버들이 넷스케이프(코드명 Mozilla)에만 고급 페이지를 주던 관행 때문이다. 경쟁 브라우저가 차별을 피하려고 Mozilla를 사칭했고, 그 꼬리표가 호환성 때문에 지금까지 남았다. 그래서 문자열 앞부분이 아니라 뒤쪽 Chrome/, Firefox/, Edg/, OPR/ 같은 토큰을 봐야 실제 브라우저를 알 수 있다.
최근 문자열은 예전보다 정보가 적다. 크롬은 2022년 2분기부터 “수동 핑거프린팅에 쓰일 수 있는” 식별 정보를 줄이는 유저 에이전트 축소를 단계적으로 적용해, 세부 버전과 플랫폼 버전, 기기 모델 같은 값을 고정했다 (Privacy Sandbox, User-Agent reduction). 위 예시의 120.0.0.0처럼 세부 버전이 0으로 채워진 것이 그 결과다. 상세 정보가 필요한 서버는 User-Agent Client Hints 헤더로 필요한 항목만 요청하도록 바뀌었다.
확인은 브라우저 주소창에서 끝나고, 변경은 크롬 개발자 도구나 명령줄 옵션 하나로 된다.
navigator.userAgent를 입력하면 현재 문자열이 나온다 (MDN, 사용자 에이전트). “User Agent 확인” 류의 웹 도구는 이 값을 화면에 보여주는 것이다.curl -A "문자열" URL처럼 옵션 하나로 바꿀 수 있다. 라이브러리 기본값은 curl/7.64.1, PostmanRuntime/7.26.5처럼 도구 이름이 그대로 노출된다 (MDN, User-Agent 헤더).SEO 점검에서 유저 에이전트 변경이 쓰이는 장면은 구글봇 모바일 문자열로 바꿔 서버가 크롤러에게 다른 HTML을 주는지 보는 것이다. 다만 서버가 IP까지 검증하면 문자열만 바꿔서는 구글봇 대우를 받지 못한다.
크롤러는 문자열 안에 자기 이름과 안내 URL을 넣고, robots.txt에는 그 이름의 짧은 토큰으로 규칙을 받는다. 구글은 색인에 “스마트폰 에이전트로 크롤링된 모바일 버전의 콘텐츠”를 쓰므로 모바일 문자열이 기준이다 (Google Search Central, 모바일 중심 색인 생성).
| 크롤러 | 유저 에이전트 문자열 (요약) | robots.txt 토큰 | 용도 |
|---|---|---|---|
| 구글봇 스마트폰 | 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) | Googlebot | 구글 검색 색인(기본) |
| 구글봇 데스크톱 | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/W.X.Y.Z Safari/537.36 | Googlebot | 구글 검색 색인 |
| 네이버 Yeti | 이름에 Yeti 포함 | Yeti | 네이버 검색 수집 |
| GPTBot | … compatible; GPTBot/1.4; +https://openai.com/gptbot | GPTBot | OpenAI 모델 학습용 크롤링 |
| OAI-SearchBot | … Chrome/131.0.0.0 Safari/537.36; compatible; OAI-SearchBot/1.4; +https://openai.com/searchbot | OAI-SearchBot | ChatGPT 검색 결과 노출 |
| ChatGPT-User | … compatible; ChatGPT-User/1.0; +https://openai.com/bot | ChatGPT-User | 사용자가 요청한 페이지 방문 |
| ClaudeBot, Claude-SearchBot, Claude-User | 각 이름 포함 | ClaudeBot 등 | 학습, 검색 품질, 사용자 요청 |
구글의 문자열과 토큰은 공식 크롤러 목록에 나오고, Chrome/W.X.Y.Z는 구글봇이 쓰는 크로미움 버전이 계속 바뀐다는 표시다 (Google Search Central, Google의 일반 크롤러). OpenAI는 학습용 GPTBot, 검색 노출용 OAI-SearchBot, 사용자 요청용 ChatGPT-User를 분리해 robots.txt로 따로 제어하게 한다 (OpenAI, Overview of OpenAI Crawlers). 앤트로픽도 ClaudeBot(학습), Claude-SearchBot(검색), Claude-User(사용자 요청) 셋을 같은 방식으로 구분한다 (Anthropic, Does Anthropic crawl data from the web).
robots.txt에서 이 토큰은 대소문자를 구분하지 않고, 구글 크롤러는 “크롤러의 사용자 에이전트와 일치하는 가장 구체적인 사용자 에이전트가 있는 그룹”의 규칙을 따른다 (Google Search Central, robots.txt 해석 방식). User-agent: *는 나머지 전체에 적용되는 기본 그룹이다. 네이버 가이드도 User-agent: *에 Disallow를 걸고 User-agent: Yeti만 Allow하는 예제로 토큰별 분리를 보여 준다 (네이버 서치어드바이저, robots.txt 설정하기).
서치폴라리스 사이트의 robots.txt는 2026년 10월 기준 GPTBot, OAI-SearchBot, ChatGPT-User, Google-Extended, ClaudeBot, PerplexityBot, Bytespider 토큰에 각각 Allow: /를 선언해 두고 있다. AI 검색 인용을 노리는 사이트라면 이 토큰들이 유저 에이전트 관리의 실제 대상이다.
문자열은 요청하는 쪽이 마음대로 쓰는 값이어서 언제든 위조된다. MDN은 “스팸 봇, 다운로드 관리자, 일부 브라우저는 자신의 정체를 숨기고 다른 클라이언트인 척 하기 위해 가짜 사용자 에이전트 문자열을 보내곤” 하며 이를 유저 에이전트 스푸핑이라 부른다고 설명한다 (MDN, 사용자 에이전트).
규모는 작지 않다. 임퍼바의 2025년 보고서는 2024년 전체 웹 트래픽의 51%가 자동화 트래픽으로 “10년 만에 처음으로” 사람을 넘어섰고, 악성 봇만 37%라고 집계했다 (Imperva, 2025 Bad Bot Report). 보고서는 “브라우저 신분 위조”와 헤드리스 브라우저를 대표적인 탐지 회피 수법으로 꼽는다. 서버 로그에 크롬이라고 찍힌 요청의 상당수가 사실 봇일 수 있다는 뜻이다.
그래서 구글봇 판별은 문자열이 아니라 IP로 한다. 구글은 역방향 DNS 조회로 호스트가 googlebot.com, google.com, googleusercontent.com인지 확인하는 수동 방법과, 공개된 IP 대역 JSON과 대조하는 자동 방법을 안내하며, 이 검증이 “스팸 발송자나 악의적 사용자가 Google을 가장하여 사이트에 액세스하지 못하게” 막아 준다고 설명한다 (Google Search Central, Googlebot 및 기타 Google 크롤러 확인). 2026년 10월 1일자 구글봇 IP 대역 파일에는 317개 접두어가 들어 있다 (Google, googlebot.json). 앤트로픽도 같은 목적의 IP 목록 bots.json을 공개한다.
사칭 관행과 축소 정책 때문에 문자열이 브라우저의 실제 능력을 보장하지 않기 때문이다. MDN은 “브라우저별로 다른 웹 페이지 또는 서비스를 제공하는 것은 일반적으로 좋지 않은 생각”이라며, 특정 브라우저를 겨냥하는 대신 “기능의 가용성을 기반으로 웹사이트를 점진적으로 개선”하라고 권한다 (MDN, 사용자 에이전트를 이용한 브라우저 감지).
대안은 셋이다. 기능 탐지(해당 API가 있는지 직접 검사), 터치 여부는 navigator.maxTouchPoints나 (pointer:coarse) 미디어 쿼리, 기기 정보가 꼭 필요하면 Sec-CH-UA-Mobile 같은 Client Hints 헤더다. SEO 관점에서도 유저 에이전트로 사람과 크롤러에게 다른 콘텐츠를 주는 것은 클로킹으로 간주되므로, 유저 에이전트 분기는 식별과 로그 분석에 쓰고 콘텐츠는 같게 유지하는 것이 안전하다.
서버가 문자열만 보고 분기한다면 그렇다. 구글봇 스마트폰 문자열로 바꿔 접속해 일반 사용자와 다른 HTML을 받는지 보는 것은 클로킹 점검의 기본이다. 다만 IP 검증을 하는 서버나 CDN은 문자열만으로 구글봇 대우를 하지 않으므로, 구글이 실제로 본 화면은 서치콘솔 URL 검사의 렌더링 결과로 확인하는 편이 정확하다.
브라우저 문자열의 형식과 예시는 MDN User-Agent 헤더 문서에, 구글 크롤러 전체 목록은 Google Search Central의 크롤러 개요에, OpenAI와 앤트로픽 크롤러는 각 사의 크롤러 문서에 있다. 서드파티 목록 사이트보다 각 운영 주체의 공식 문서가 정확하다.
안드로이드 크롬은 Mobile 토큰, 아이폰 사파리는 iPhone과 Mobile/ 토큰이 들어간다. 다만 크롬 축소 정책 이후 기기 모델은 보이지 않으므로, 서버 측에서 정확한 판별이 필요하면 Sec-CH-UA-Mobile Client Hints 헤더를 쓴다.
서치폴라리스가 AI 검색 가시성을 진단하고 GEO 실행까지 대행합니다.