Πώς να ελέγξετε τα logs του server σας για AI crawlers

Δημοσιεύθηκε

Σύντομη απάντηση

Αναζητήστε στο πεδίο user agent του access log σας tokens όπως GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot και PerplexityBot και έπειτα δείτε τους κωδικούς κατάστασης που έλαβαν. Το user agent από μόνο του δεν αποδεικνύει τίποτα, οπότε ελέγξτε κάθε IP προέλευσης με τη λίστα IP που δημοσιεύει ο πάροχος ή, για την Google και την Apple, με reverse και forward DNS.

Το robots.txt λέει τι ζητάτε από τους crawlers. Το access log σας δείχνει τι συνέβη πραγματικά: ποιοι AI crawlers ήρθαν, ποιες σελίδες ζήτησαν και τι απάντησε ο server σας. Είναι η πιο άμεση απόδειξη που έχετε και χρειάζεται μόνο τα αρχεία log και ένα terminal. Τα παραδείγματα παρακάτω χρησιμοποιούν τη συνδυασμένη μορφή log (combined) που χρησιμοποιούν από προεπιλογή το nginx και ο Apache.

Σε αυτή τη σελίδα
  1. Πώς μοιάζει η επίσκεψη ενός AI crawler σε ένα access log;
  2. Πώς μετράω τις επισκέψεις των AI crawlers;
  3. Τι έλαβε πραγματικά κάθε crawler;
  4. Πώς επαληθεύω ότι μια επίσκεψη προήλθε πραγματικά από την OpenAI, την Anthropic ή την Perplexity;
  5. Πώς επαληθεύω τον Googlebot, τον Applebot και τον CCBot;
  6. Πώς μοιάζουν οι ψεύτικοι AI crawlers;
  7. Τι δεν μπορούν να σας πουν τα logs;

Πώς μοιάζει η επίσκεψη ενός AI crawler σε ένα access log;

Στη συνδυασμένη μορφή, κάθε γραμμή περιέχει την IP του client, την ώρα, τη γραμμή αιτήματος, τον κωδικό κατάστασης, το μέγεθος της απάντησης, το referrer και το user agent. Το nginx την ορίζει ως $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" και η μορφή combined του Apache έχει τα ίδια πεδία. Μια επίσκεψη του crawler εκπαίδευσης της OpenAI μοιάζει έτσι:

20.171.206.5 - - [12/Nov/2026:10:00:01 +0000] "GET /pricing HTTP/1.1" 200 5120 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot"

Τα tokens που πρέπει να αναζητήσετε είναι αυτά που τεκμηριώνουν οι πάροχοι: GPTBot, OAI-SearchBot και ChatGPT-User (OpenAI)· ClaudeBot, Claude-SearchBot και Claude-User (Anthropic)· PerplexityBot και Perplexity-User (Perplexity)· Googlebot, Applebot, meta-externalagent, meta-webindexer και CCBot. Δεν θα δείτε ποτέ Google-Extended ή Applebot-Extended. Η Google λέει ότι το Google-Extended δεν έχει ξεχωριστή συμβολοσειρά user agent και η Apple λέει ότι το Applebot-Extended δεν σαρώνει· και τα δύο είναι μόνο tokens του robots.txt.

Πώς μετράω τις επισκέψεις των AI crawlers;

Αν χωρίσετε κάθε γραμμή με βάση τον χαρακτήρα διπλών εισαγωγικών, το user agent καταλήγει στο πεδίο 6. Η αντιστοίχιση μόνο σε αυτό το πεδίο αποφεύγει ψευδείς εντοπισμούς από URLs που τυχαίνει να περιέχουν το όνομα ενός bot. Αυτό μετρά τις επισκέψεις ανά crawler στο τρέχον log και στα εναλλασσόμενα, συμπιεσμένα:

zcat -f /var/log/nginx/access.log* \
  | awk -F'"' '{print $6}' \
  | grep -Eo 'GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-SearchBot|Claude-User|PerplexityBot|Perplexity-User|Googlebot|bingbot|Applebot|meta-externalagent|meta-webindexer|CCBot' \
  | sort | uniq -c | sort -rn

Προσαρμόστε τη διαδρομή για τον Apache, συχνά /var/log/apache2/access.log* ή /var/log/httpd/access_log*. Το zcat -f διαβάζει τόσο απλά όσο και συμπιεσμένα με gzip αρχεία. Αν λείπει ένας crawler που περιμένατε, αυτό από μόνο του δεν αποδεικνύει αποκλεισμό: μπορεί απλώς να μην έχει επισκεφθεί στο διάστημα που καλύπτουν τα logs σας.

Τι έλαβε πραγματικά κάθε crawler;

Οι επισκέψεις μετράνε λιγότερο από τις απαντήσεις. Ένας crawler που λαμβάνει 403 σε κάθε αίτημα έχει επισκεφθεί αλλά δεν έχει διαβάσει τίποτα. Αυτές οι εντολές δείχνουν τους κωδικούς κατάστασης, τις πιο συχνά ζητούμενες διαδρομές και αν ο crawler ανέκτησε το robots.txt:

# Status codes returned to PerplexityBot
zcat -f /var/log/nginx/access.log* | awk -F'"' '$6 ~ /PerplexityBot/ {split($3, s, " "); print s[1]}' | sort | uniq -c

# Most requested paths for OAI-SearchBot
zcat -f /var/log/nginx/access.log* | awk -F'"' '$6 ~ /OAI-SearchBot/ {split($2, r, " "); print r[2]}' | sort | uniq -c | sort -rn | head -20

# Did ClaudeBot fetch robots.txt, and what did it get?
zcat -f /var/log/nginx/access.log* | awk -F'"' '$6 ~ /ClaudeBot/ && $2 ~ /robots\.txt/ {split($3, s, " "); print s[1]}' | sort | uniq -c

Θέλετε κυρίως 200. Πολλά 403 ή 429 υποδεικνύουν κανόνα firewall ή περιορισμό ρυθμού. Οι απαντήσεις 5xx στο robots.txt είναι σοβαρές: σύμφωνα με το RFC 9309, ένας crawler που λαμβάνει σφάλμα server για το robots.txt πρέπει να υποθέσει ότι ολόκληρος ο ιστότοπος είναι απαγορευμένος.

Αν ο ιστότοπός σας βρίσκεται πίσω από CDN, αλλάζουν δύο πράγματα. Τα αιτήματα που αποκλείει το CDN δεν φτάνουν ποτέ στον origin σας, άρα δεν εμφανίζονται καθόλου στα logs του· ελέγξτε αντί γι' αυτό τα συμβάντα ασφαλείας του ίδιου του CDN. Και αν δεν επαναφέρετε την IP του επισκέπτη, ο origin καταγράφει τη διεύθυνση του CDN. Το Cloudflare, για παράδειγμα, στέλνει την αρχική IP στην κεφαλίδα CF-Connecting-IP και από προεπιλογή καταγράφεται μια IP του Cloudflare.

Πώς επαληθεύω ότι μια επίσκεψη προήλθε πραγματικά από την OpenAI, την Anthropic ή την Perplexity;

Αυτοί οι πάροχοι δημοσιεύουν τα εύρη IP που χρησιμοποιούν οι agents τους: η OpenAI στα openai.com/gptbot.json, openai.com/searchbot.json και openai.com/chatgpt-user.json· η Anthropic στο claude.com/crawling/bots.json· η Perplexity στα perplexity.ai/perplexitybot.json και perplexity.ai/perplexity-user.json. Η Anthropic λέει ότι μια IP προέλευσης που βρίσκεται στη λίστα της υποδεικνύει ότι ο crawler προέρχεται από την Anthropic. Κανένας από τους τρεις δεν τεκμηριώνει επαλήθευση με reverse DNS, οπότε χρησιμοποιήστε τις λίστες.

Τα αρχεία έχουν κοινή μορφή, μια λίστα prefixes με εγγραφές ipv4Prefix ή ipv6Prefix, οπότε ένα μικρό script ελέγχει μια IP απέναντι σε οποιοδήποτε από αυτά:

python3 - 20.171.206.5 https://openai.com/gptbot.json <<'EOF'
import ipaddress, json, sys, urllib.request
ip = ipaddress.ip_address(sys.argv[1])
req = urllib.request.Request(sys.argv[2], headers={"User-Agent": "log-check"})
prefixes = json.load(urllib.request.urlopen(req))["prefixes"]
nets = [ipaddress.ip_network(p.get("ipv4Prefix") or p.get("ipv6Prefix")) for p in prefixes]
print(ip, "listed" if any(ip in n for n in nets) else "NOT listed")
EOF

Για να απαριθμήσετε τις IP που δήλωσαν έναν συγκεκριμένο crawler, εκτελέστε awk -F'"' '$6 ~ /GPTBot/ {split($1, a, " "); print a[1]}' πάνω στο log και περάστε το από sort | uniq -c | sort -rn. Ελέγξτε καθεμία με την αντίστοιχη λίστα. Οι λίστες αλλάζουν, οπότε κατεβάστε τις φρέσκες αντί να κρατάτε παλιό αντίγραφο.

Πώς επαληθεύω τον Googlebot, τον Applebot και τον CCBot;

Η Google, η Apple και το Common Crawl τεκμηριώνουν έλεγχο με reverse και forward DNS. Αναζητήστε το hostname της IP, ελέγξτε το domain του, έπειτα αναζητήστε αυτό το hostname και επιβεβαιώστε ότι δείχνει πίσω στην ίδια IP:

host 66.249.66.1
# 1.66.249.66.in-addr.arpa domain name pointer crawl-66-249-66-1.googlebot.com.
host crawl-66-249-66-1.googlebot.com
# crawl-66-249-66-1.googlebot.com has address 66.249.66.1

Για την Google το hostname πρέπει να τελειώνει σε googlebot.com, google.com ή googleusercontent.com, ανάλογα με τον crawler· η Google δημοσιεύει και τα εύρη της, με τον Googlebot στο common-crawlers.json. Για την Apple πρέπει να βρίσκεται στο applebot.apple.com, με τα εύρη στο applebot.json. Για το Common Crawl πρέπει να βρίσκεται κάτω από το crawl.commoncrawl.org και το Common Crawl προειδοποιεί ότι άλλοι crawlers χρησιμοποιούν ψευδώς το όνομα CCBot.

Πώς μοιάζουν οι ψεύτικοι AI crawlers;

Τα scrapers δανείζονται συχνά το user agent ενός γνωστού crawler για να περάσουν τα φίλτρα. Τυπικά σημάδια:

Υπάρχει και το αντίστροφο πρόβλημα: ένας crawler που χρησιμοποιεί συνηθισμένο user agent browser δεν μπορεί να αναγνωριστεί καθόλου από τη γραμμή του log. Το 2025 το Cloudflare δήλωσε ότι παρατήρησε την Perplexity να σαρώνει με αδήλωτα user agents που μοιάζουν με browser από IP εκτός των δημοσιευμένων εύρων της· η Perplexity αμφισβήτησε αυτή την περιγραφή και απέδωσε μέρος της κίνησης σε υπηρεσία τρίτου. Τα logs από μόνα τους δεν μπορούν να λύσουν τέτοιες περιπτώσεις, και γι' αυτό η επαλήθευση με δημοσιευμένα εύρη IP μετράει προς κάθε κατεύθυνση.

Τι δεν μπορούν να σας πουν τα logs;

Τα logs δείχνουν τι έφτασε στον server σας. Δεν δείχνουν τι αποκλείστηκε από το CDN σας πριν από τον origin, αν μια σελίδα που επέστρεψε 200 περιείχε το κείμενο ή μόνο ένα κέλυφος scripts, ούτε αν ένας crawler θα επιτρεπόταν αν ερχόταν σήμερα. Καλύπτουν επίσης μόνο το διάστημα που διατηρείτε και οι ιστότοποι με χαμηλή κίνηση μπορεί να βλέπουν σπάνια AI crawlers.

Σε έναν λογαριασμό AISeeWhy μπορείτε να ανεβάσετε ένα access log σε συνδυασμένη μορφή (απλό ή .gz, έως 50 MB)· αναλύεται και απορρίπτεται, και τα αιτήματα κάθε AI crawler μετριούνται με τους κωδικούς κατάστασής τους και ελέγχονται με τα εύρη IP που δημοσιεύουν οι πάροχοι.

Συχνές ερωτήσεις

Γιατί δεν βλέπω το Google-Extended στα logs μου;

Η Google λέει ότι το Google-Extended δεν έχει ξεχωριστή συμβολοσειρά user agent. Τη σάρωση κάνουν οι υπάρχοντες crawlers της Google και το token ελέγχει μόνο πώς μπορεί να χρησιμοποιηθεί το περιεχόμενο. Το ίδιο ισχύει για το Applebot-Extended, το οποίο σύμφωνα με την Apple δεν σαρώνει.

Μπορώ να εμπιστευτώ το user agent στα logs μου;

Όχι. Οποιοσδήποτε μπορεί να στείλει οποιοδήποτε user agent. Αντιμετωπίστε το ως δήλωση και επιβεβαιώστε την με τα δημοσιευμένα εύρη IP του παρόχου ή, για την Google, την Apple και το Common Crawl, με αναζήτηση reverse και forward DNS.

Τα logs μου δεν δείχνουν επισκέψεις AI crawlers. Είμαι αποκλεισμένος;

Όχι απαραίτητα. Ο crawler μπορεί να μην έχει επισκεφθεί ακόμη, το CDN σας μπορεί να τον αποκλείσει πριν από τον origin ή τα logs σας να καταγράφουν μόνο τις διευθύνσεις IP του CDN. Ελέγξτε τα συμβάντα ασφαλείας του CDN σας και δοκιμάστε τη σελίδα με το user agent κάθε crawler.

Είναι crawler η κίνηση του ChatGPT-User;

Η OpenAI λέει ότι ο ChatGPT-User χρησιμοποιείται για ορισμένες ενέργειες χρηστών και δεν χρησιμοποιείται για αυτόματη σάρωση του web. Οι επισκέψεις του συνήθως έπονται του αιτήματος ενός ανθρώπου προς το ChatGPT για μια σελίδα, οπότε έρχονται σε μικρούς αριθμούς.

Πηγές

Περισσότερα άρθρα