Đọc access log để biết Googlebot, Bingbot và bot AI thật sự làm gì trên website
Công cụ phân tích log server cho SEO này đọc file access log của Nginx hoặc Apache ở định dạng combined, kể cả file nén .gz và file hàng trăm MB, ngay trên trình duyệt theo kiểu đọc luồng từng khúc nên không làm treo máy. Kết quả cho biết Googlebot, Bingbot, các bot AI như GPTBot, ClaudeBot, PerplexityBot ghé bao nhiêu lần mỗi ngày, nhận mã trạng thái gì, URL nào được crawl nhiều, URL nào bị bỏ quên, và URL nào chỉ bot gặp lỗi trong khi người dùng vẫn vào bình thường. Vì chuỗi User-Agent ai cũng giả được, công cụ có nút xác minh IP bằng DNS ngược rồi DNS xuôi đúng như Google và Bing hướng dẫn.
Tính năng nổi bật
- Đọc định dạng combined và common của Nginx, Apache bằng bộ phân tích tự viết chạy một lượt mỗi dòng, chịu được dòng hỏng, dòng bị cắt, request rác dạng nhị phân
- Đọc file theo luồng (File.stream), giải nén .gz bằng DecompressionStream của trình duyệt, chọn nhiều file cùng lúc (access.log, access.log.1, access.log.2.gz…), có thanh tiến độ và nút dừng
- Nhận diện theo User-Agent: Googlebot (cả Image, Video, News), các crawler Google khác, Bingbot, hơn 15 bot AI (GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-User, PerplexityBot, CCBot, Bytespider, Amazonbot…), Cốc Cốc, Applebot, Yandex, Baidu, bot công cụ SEO
- Biểu đồ số lượt crawl theo ngày của Googlebot, Bingbot và bot AI, xuất CSV theo ngày cho mọi nhóm
- Bảng mã trạng thái 2xx, 3xx, 4xx, 5xx cho từng nhóm truy cập để thấy ngay bot có đang gặp lỗi nhiều hơn người dùng không
- Năm bảng URL: Googlebot crawl nhiều, Googlebot crawl ít, người dùng vào nhưng Googlebot không ghé, URL chỉ bot gặp lỗi, URL bot AI ghé nhiều; mỗi bảng xuất CSV
- Xác minh 10 IP tự xưng Googlebot hoặc Bingbot nhiều lượt nhất bằng DNS ngược + xuôi qua máy chủ, kèm lệnh host để tự kiểm
- Bộ nhớ có giới hạn: chỉ giữ thống kê (tối đa 150.000 URL, 20.000 IP bot), không giữ nội dung file, nên file 100 MB vẫn chạy được trên laptop phổ thông
Vì sao phân tích log server quan trọng với SEO
Search Console cho biết Google đã lập chỉ mục trang nào và báo cáo Thống kê thu thập dữ liệu cho biết số yêu cầu tổng hợp, nhưng chỉ access log của máy chủ ghi lại từng lượt Googlebot ghé từng URL, vào giờ nào, nhận mã trạng thái gì. Log trả lời những câu hỏi mà công cụ khác không trả lời được: trang mới đăng đã được Googlebot ghé chưa, Googlebot có đang tốn lượt crawl vào URL lọc, URL có tham số vô nghĩa không, có trang nào chỉ trả lỗi 503 cho bot vì tường lửa hay giới hạn tần suất chặn nhầm không, các bot AI đang lấy những bài nào của bạn. Với website vài chục trang, những câu hỏi này ít quan trọng. Với website thương mại điện tử, trang tin hay website có hàng nghìn trang, log là cách chắc chắn nhất để biết ngân sách thu thập dữ liệu đang được dùng vào đâu. Khó khăn là file log rất lớn và thường phải dùng phần mềm trả phí hoặc dòng lệnh để đọc; công cụ này đọc ngay trên trình duyệt và file không rời khỏi máy bạn.
Lợi ích khi sử dụng
- Thấy chính xác Googlebot ghé URL nào, bao nhiêu lần, nhận mã gì
- Phát hiện URL chỉ bot gặp lỗi do tường lửa, giới hạn tần suất hay lỗi máy chủ theo giờ
- Biết các bot AI đang lấy nội dung nào để quyết định chặn hay cho phép trong robots.txt
- Lọc bot giả mạo bằng DNS ngược thay vì tin chuỗi User-Agent
- Đọc file log lớn, file nén .gz mà không cần cài phần mềm hay dùng dòng lệnh
- File log không bị tải lên máy chủ nào, chỉ IP cần xác minh mới được gửi đi khi bạn bấm
Cách phân tích access log bằng công cụ
- 1Tải file access log từ máy chủ. Với Nginx thường ở /var/log/nginx/access.log, Apache ở /var/log/apache2/access.log hoặc /var/log/httpd/access_log; hosting dùng cPanel có mục Raw Access. Các file cũ đã xoay vòng thường có đuôi .1, .2.gz.
- 2Bấm vào khung chọn file, chọn một hoặc nhiều file log. Công cụ đọc theo luồng và hiện tiến độ; bấm Dừng đọc nếu muốn xem kết quả của phần đã đọc.
- 3Nếu chỉ muốn thử, dán vài dòng log vào ô bên phải hoặc bấm Dùng log mẫu rồi Phân tích đoạn dán.
- 4Xem các ô tổng hợp, biểu đồ theo ngày và bảng mã trạng thái theo nhóm. Mở mục dòng không đọc được nếu số dòng hỏng cao bất thường.
- 5Chuyển giữa năm bảng URL để tìm URL bị crawl quá nhiều, bị bỏ quên, hoặc chỉ bot gặp lỗi; bấm Xuất CSV để gửi cho lập trình viên.
- 6Bấm Kiểm DNS 10 IP để xác minh các IP tự xưng Googlebot, Bingbot có phải bot thật không.
Định dạng log combined mà công cụ đọc
Nginx mặc định ghi log theo định dạng có tên combined: $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent". Apache có định dạng cùng tên với chuỗi %h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-agent}i". Một dòng điển hình: 66.249.66.1 - - [01/Nov/2026:08:01:12 +0700] "GET / HTTP/1.1" 200 18234 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)". Công cụ đọc lần lượt: địa chỉ IP, thời gian trong ngoặc vuông, dòng request trong ngoặc kép (phương thức, đường dẫn, giao thức), mã trạng thái ba chữ số, số byte trả về (dấu gạch ngang hiểu là 0), referer và User-Agent. Dấu nháy được thoát bằng gạch chéo ngược trong UA hay URL vẫn đọc đúng. Định dạng common (không có referer và UA) cũng đọc được nhưng khi đó mọi dòng không có UA sẽ rơi vào nhóm bot khác. Cấu hình thêm trường ở cuối dòng như thời gian xử lý request vẫn đọc được vì công cụ bỏ qua phần sau UA. Ngày được lấy đúng như ghi trong log, không đổi múi giờ.
Cách công cụ đọc file lớn mà không treo trình duyệt
Mở cả file 100 MB vào bộ nhớ rồi tách dòng sẽ làm tab trình duyệt nặng và có thể bị đóng. Công cụ đọc theo luồng: file.stream() trả từng khúc byte nhỏ, nếu là .gz thì đi qua DecompressionStream("gzip") để giải nén dần, rồi qua TextDecoderStream để thành chữ UTF-8. Mỗi khúc chữ được tách thành dòng; phần dòng dở ở cuối khúc được giữ lại để nối với khúc sau. Mỗi dòng được phân tích ngay và chỉ cộng vào các bảng đếm, không lưu lại nội dung. Khoảng mỗi 60 mili giây, công cụ nhường lại cho giao diện để cập nhật thanh tiến độ và nhận lệnh dừng. Các bảng đếm đều có trần: tối đa 150.000 URL khác nhau, 20.000 IP tự xưng Googlebot hoặc Bingbot, 500 tên bot, 20 dòng hỏng mẫu; phần vượt được đếm riêng và báo trên giao diện. Trong thử nghiệm bằng Node.js, 200.000 dòng log (khoảng 31 MB) được phân tích trong khoảng 0,4 giây; trên trình duyệt có thêm chi phí giải mã và cập nhật giao diện nên chậm hơn, nên một file 100 MB thường mất từ vài giây đến vài chục giây tùy máy.
User-Agent có thể giả mạo: xác minh bằng DNS
Chuỗi User-Agent do bên gửi tự khai; bất kỳ công cụ quét nào cũng có thể ghi "Googlebot" để được đối xử ưu tiên hoặc để lách tường lửa. Trong log thật, các request dò lỗ hổng như /wp-login.php hay /.env mang UA Googlebot không hiếm. Vì vậy mọi con số theo nhóm bot trong công cụ là theo UA tự xưng. Google hướng dẫn cách xác minh trong trang Verifying Googlebot and other Google crawlers: tra DNS ngược địa chỉ IP, kiểm tên trả về thuộc googlebot.com, google.com hoặc googleusercontent.com, sau đó tra DNS xuôi tên đó và kiểm nó trả lại đúng IP ban đầu. Google cũng công bố danh sách dải IP dạng JSON cho crawler thông thường, crawler đặc biệt và fetcher do người dùng kích hoạt. Bing hướng dẫn cách tương tự với tên kết thúc bằng search.msn.com. Nút Kiểm DNS 10 IP gửi 10 IP nhiều lượt nhất lên máy chủ, máy chủ dùng module dns của Node.js thực hiện đúng hai bước trên, mỗi lần tra tối đa 3 giây, 10 lượt mỗi giờ cho mỗi người dùng, chỉ nhận IP công khai. Kết quả Bot thật nghĩa là cả hai bước khớp; Giả mạo nghĩa là tên DNS ngược không thuộc tên miền của Google hay Bing. Bạn cũng tự kiểm được bằng lệnh host 66.249.66.1, rồi host với tên vừa nhận.
Bot AI trong log và cách xử lý
Các hãng AI vận hành nhiều bot khác nhau với mục đích khác nhau, nên cần phân biệt khi quyết định chặn. Theo trang tài liệu của OpenAI, GPTBot thu thập nội dung có thể dùng để huấn luyện mô hình, OAI-SearchBot đưa website vào kết quả tìm kiếm của ChatGPT, còn ChatGPT-User truy cập trang khi người dùng ChatGPT yêu cầu và không dùng để crawl tự động. Perplexity cũng tách PerplexityBot (đưa website vào kết quả tìm kiếm, không dùng để huấn luyện mô hình nền) và Perplexity-User (truy cập khi người dùng hỏi). Anthropic tách ClaudeBot, Claude-User và Claude-SearchBot. Mỗi bot có tên riêng trong robots.txt; chặn GPTBot không chặn OAI-SearchBot. OpenAI và Perplexity công bố danh sách IP dạng JSON để xác minh. Riêng Google-Extended chỉ là một tên dùng trong robots.txt để quản lý việc dùng nội dung cho các mô hình AI của Google, không phải một User-Agent riêng, nên bạn sẽ không thấy nó trong log; việc thu thập vẫn do các crawler Google thông thường thực hiện. Bảng Bot AI crawl cho biết bài nào bị các bot này lấy nhiều nhất, hữu ích khi cân nhắc giữa được trích dẫn trong câu trả lời AI và bảo vệ nội dung.
Đọc năm bảng URL
Googlebot crawl nhiều: URL được Googlebot ghé nhiều nhất. Nếu đứng đầu là URL lọc, URL có tham số sắp xếp, trang tìm kiếm nội bộ hay trang phân trang sâu, ngân sách crawl đang bị tiêu vào chỗ ít giá trị; cân nhắc canonical, chặn trong robots.txt hoặc bỏ liên kết tới chúng. Googlebot crawl ít: URL người dùng có vào thành công nhưng Googlebot hiếm khi ghé; đó có thể là trang quan trọng nhưng ít liên kết nội bộ. Người vào, Googlebot không ghé: URL có lượt xem của người dùng nhưng không có lượt Googlebot nào trong khoảng thời gian của log; kiểm xem trang đã có trong sitemap, có liên kết nội bộ, có bị noindex hay chặn không. Chỉ bot gặp lỗi: URL mà Googlebot hoặc Bingbot nhận mã 4xx hay 5xx trong khi người dùng không gặp lỗi lần nào; đây thường là dấu hiệu tường lửa, plugin bảo mật hay giới hạn tần suất đối xử khác với bot, hoặc URL cũ đã xóa mà bot vẫn nhớ. Bot AI crawl: URL các bot AI ghé nhiều nhất. Bật tùy chọn gộp query string nếu site có nhiều tham số theo dõi như utm, để các biến thể được cộng vào cùng một URL.
Ví dụ với log mẫu
Bấm Dùng log mẫu rồi Phân tích đoạn dán, công cụ đọc 14 dòng: 13 dòng hợp lệ và 1 dòng hỏng (dòng bị cắt giữa chừng). Theo UA tự xưng có 6 lượt Googlebot, 1 lượt Bingbot, 2 lượt bot AI (GPTBot và ClaudeBot, cùng ghé /blog/seo-la-gi) và 4 lượt người dùng, trải trên 2 ngày 01/11 và 02/11/2026. Mã trạng thái của Googlebot: 3 lượt 200, 2 lượt 404, 1 lượt 503. Bảng Chỉ bot gặp lỗi có 3 URL: /blog/bai-cu-da-xoa (404), /vi/bang-gia (503) và /wp-login.php (404). Trường hợp /vi/bang-gia đáng chú ý nhất: Googlebot nhận 503 lúc 07:45 ngày 02/11 nhưng người dùng vào lúc 08:10 vẫn nhận 200, gợi ý máy chủ quá tải hoặc tường lửa chặn bot vào giờ đó. Bảng Người vào, Googlebot không ghé có /vi/du-an. File /_next/static/app.js không xuất hiện trong bảng URL vì đang bật bỏ file tĩnh. Danh sách IP tự xưng Googlebot có 66.249.66.1 (3 lượt), 66.249.66.3 (2 lượt) và 1.2.3.4 (1 lượt, chính là request /wp-login.php); khi kiểm DNS, 66.249.66.1 trả về crawl-66-249-66-1.googlebot.com và tra xuôi khớp, còn 1.2.3.4 không có tên DNS ngược hợp lệ nên không phải Googlebot.
Những gì log không cho biết
Log chỉ ghi những request tới được máy chủ của bạn. Nếu website đứng sau CDN hoặc proxy như Cloudflare, nhiều request được trả thẳng từ bộ nhớ đệm của CDN và không có trong log gốc; IP trong log có thể là IP của CDN nếu máy chủ chưa cấu hình lấy IP thật (với Nginx là module real_ip). Khi đó cần lấy log từ CDN hoặc cấu hình lại trước khi phân tích. Log cũng không cho biết trang có được lập chỉ mục hay không, có xếp hạng hay không: Googlebot ghé một trang không đồng nghĩa trang đó sẽ vào chỉ mục. Hãy đối chiếu với báo cáo Trang và Thống kê thu thập dữ liệu trong Search Console. Cuối cùng, log thường chỉ giữ vài ngày đến vài tuần do cấu hình xoay vòng; muốn thấy xu hướng crawl nhiều tháng, cần lưu log lâu hơn. File log chứa địa chỉ IP người dùng, là dữ liệu cá nhân, nên lưu trữ và chia sẻ cẩn thận; công cụ này đọc file ngay trên máy bạn và không tải file lên đâu.
Khác gì công cụ phân tích mức độ log ứng dụng
Công cụ phân tích log ứng dụng đếm các mức INFO, WARN, ERROR trong log của phần mềm để lập trình viên tìm lỗi. Công cụ này đọc access log của máy chủ web, nơi mỗi dòng là một request HTTP, và trả lời câu hỏi SEO: ai đang crawl website, crawl trang nào, nhận mã trạng thái gì. Hai loại log khác cấu trúc và mục đích, nên dùng đúng công cụ cho từng loại. Nếu cần kiểm một URL cụ thể trả mã trạng thái gì cho Googlebot ngay lúc này, dùng công cụ Kiểm tra URL trong Search Console hoặc công cụ kiểm tra mã trạng thái HTTP; log cho bức tranh thực tế trong quá khứ, còn hai công cụ kia cho một lần kiểm tại thời điểm hiện tại.
Câu hỏi thường gặp (FAQ)
Phân tích log file trong SEO để làm gì?
Để biết chính xác bot của công cụ tìm kiếm và bot AI ghé URL nào, bao nhiêu lần, vào ngày nào, nhận mã trạng thái gì. Từ đó phát hiện ngân sách crawl bị lãng phí, trang quan trọng bị bỏ quên và lỗi chỉ bot gặp phải.
File access log của Nginx và Apache nằm ở đâu?
Nginx thường ở /var/log/nginx/access.log, Apache ở /var/log/apache2/access.log (Debian, Ubuntu) hoặc /var/log/httpd/access_log (CentOS, RHEL). Hosting cPanel có mục Raw Access để tải về. Đường dẫn thật có thể khác tùy cấu hình, xem chỉ thị access_log hoặc CustomLog trong file cấu hình.
Công cụ có tải file log của tôi lên máy chủ không?
Không. File được đọc ngay trên trình duyệt. Chỉ khi bạn bấm Kiểm DNS 10 IP, danh sách tối đa 10 địa chỉ IP tự xưng bot được gửi lên máy chủ để tra DNS; máy chủ không lưu các IP này.
File log 100 MB hoặc file .gz có đọc được không?
Được. Công cụ đọc theo luồng từng khúc, giải nén .gz dần bằng tính năng có sẵn của trình duyệt và chỉ giữ bảng thống kê. Cần trình duyệt hiện đại hỗ trợ DecompressionStream; nếu không hỗ trợ, công cụ báo để bạn giải nén trước.
Log định dạng khác combined thì sao?
Định dạng common (không có referer, User-Agent) đọc được nhưng không phân loại được bot. Định dạng combined có thêm trường ở cuối cũng đọc được. Định dạng JSON hoặc tự chế khác thứ tự trường sẽ bị tính là dòng hỏng; khi đó mục dòng không đọc được hiện 20 dòng mẫu để bạn đối chiếu.
Vì sao không nên tin chuỗi User-Agent Googlebot?
Vì User-Agent do bên gửi tự khai, công cụ quét lỗ hổng hay bot cào dữ liệu thường mạo danh Googlebot. Cách xác minh là tra DNS ngược của IP, kiểm tên thuộc googlebot.com, google.com hoặc googleusercontent.com, rồi tra xuôi tên đó phải ra lại đúng IP.
Nút Kiểm DNS hoạt động thế nào?
Máy chủ nhận tối đa 10 IP công khai, với mỗi IP tra bản ghi PTR (DNS ngược), kiểm đuôi tên miền theo hướng dẫn của Google hoặc Bing, rồi tra bản ghi A hoặc AAAA (DNS xuôi) của tên đó và so với IP ban đầu. Mỗi lần tra tối đa 3 giây, 10 lượt kiểm mỗi giờ cho mỗi người dùng.
Làm sao tự xác minh Googlebot bằng dòng lệnh?
Chạy host 66.249.66.1, nếu kết quả là một tên như crawl-66-249-66-1.googlebot.com thì chạy tiếp host crawl-66-249-66-1.googlebot.com; địa chỉ trả về phải đúng 66.249.66.1. Trên Windows dùng nslookup thay cho host.
Xác minh Bingbot thế nào?
Tương tự Googlebot: tra DNS ngược của IP, tên phải kết thúc bằng search.msn.com, rồi tra xuôi tên đó phải ra lại đúng IP. Bing cũng có trang công cụ kiểm tra Bingbot trong Bing Webmaster Tools.
URL chỉ bot gặp lỗi nghĩa là gì?
Là URL mà Googlebot hoặc Bingbot nhận mã 4xx hoặc 5xx ít nhất một lần, trong khi các lượt người dùng vào cùng URL không gặp lỗi lần nào. Nguyên nhân thường gặp: tường lửa hoặc plugin bảo mật chặn bot, giới hạn tần suất trả 429 hay 503, máy chủ quá tải đúng giờ bot ghé, hoặc URL cũ đã xóa mà chỉ bot còn nhớ.
Có nên chặn GPTBot, ClaudeBot trong robots.txt không?
Tùy mục tiêu. Chặn bot huấn luyện như GPTBot, ClaudeBot giúp hạn chế nội dung bị dùng để huấn luyện mô hình, nhưng bot tìm kiếm như OAI-SearchBot, PerplexityBot là đường để website được trích dẫn trong câu trả lời AI. Mỗi bot có tên riêng trong robots.txt nên có thể chặn bot này và cho phép bot khác.
Vì sao không thấy Google-Extended trong log?
Google-Extended không phải một User-Agent riêng mà chỉ là tên dùng trong robots.txt để quản lý việc nội dung có được dùng cho các mô hình AI của Google hay không. Việc thu thập vẫn do các crawler Google thông thường thực hiện, nên log chỉ ghi Googlebot.
Tại sao số lượt Googlebot trong log khác Thống kê thu thập dữ liệu của Search Console?
Search Console đếm mọi yêu cầu của crawler Google tới cả tên miền, kể cả tài nguyên như ảnh, CSS, JS, và có thể gồm request được CDN trả lời. Log gốc chỉ ghi request tới được máy chủ, trong khoảng thời gian log còn lưu. Hai nguồn hiếm khi khớp từng con số nhưng nên cùng xu hướng.
Website dùng Cloudflare thì log có đủ không?
Có thể không. Request được Cloudflare trả từ bộ nhớ đệm không tới máy chủ gốc nên không có trong log gốc, và IP trong log có thể là IP của Cloudflare nếu máy chủ chưa cấu hình lấy IP thật. Khi IP sai, kết quả kiểm DNS cũng sai; hãy cấu hình real_ip trên Nginx hoặc mod_remoteip trên Apache trước.
Bỏ file tĩnh và gộp query string có ảnh hưởng gì?
Bỏ file tĩnh chỉ loại .css, .js, ảnh, font… khỏi các bảng URL, vẫn tính vào tổng lượt và mã trạng thái; robots.txt và sitemap vẫn được giữ. Gộp query string cộng /a?page=2 vào /a, giúp bảng gọn khi site có nhiều tham số theo dõi nhưng làm mất chi tiết từng biến thể.
Googlebot không ghé một trang thì trang đó có bị lỗi không?
Không chắc. Log chỉ phủ vài ngày hay vài tuần, trang ít thay đổi có thể được ghé thưa hơn. Nếu trang quan trọng lâu không được ghé, kiểm trang có trong sitemap, có đủ liên kết nội bộ, không bị noindex hay chặn trong robots.txt, rồi dùng công cụ Kiểm tra URL trong Search Console.
Phân tích access log khác phân tích log mức độ lỗi của ứng dụng thế nào?
Access log của máy chủ web ghi từng request HTTP với IP, URL, mã trạng thái, User-Agent, dùng để hiểu bot và người dùng truy cập ra sao. Log ứng dụng ghi các mức INFO, WARN, ERROR do phần mềm in ra, dùng để gỡ lỗi code. Công cụ này dành cho loại thứ nhất.
Từ khóa liên quan
- phân tích log server seo
- log file analysis seo
- server log analyzer
- phân tích access log
- đọc access log nginx
- phân tích log apache
- googlebot crawl log
- kiểm tra googlebot ghé website
- xác minh googlebot thật giả
- verify googlebot reverse dns
- googlebot giả mạo
- crawl budget là gì
- phân tích crawl budget
- bot ai crawl website
- gptbot trong log
- chặn gptbot robots.txt
- claudebot perplexitybot
- tần suất crawl của google
- lỗi 5xx googlebot
- nginx combined log format
- phân tích log file miễn phí
- bingbot verify