ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

วิเคราะห์ Log เซิร์ฟเวอร์เพื่อดูพฤติกรรม Googlebot
Home วิเคราะห์ Log เซิร์ฟเวอร์เพื่อดูพฤติกรรม Googlebot

วิเคราะห์ Log เซิร์ฟเวอร์เพื่อดูพฤติกรรม Googlebot

Search Console บอกผลลัพธ์ แต่ Log ของเซิร์ฟเวอร์บอกสิ่งที่เกิดขึ้นจริงทุกคำขอ นี่คือแหล่งข้อมูลเดียวที่บอกได้ว่า Googlebot เข้ามาที่ไหน เมื่อไร ได้รับคำตอบอะไร และใช้เวลาเท่าไร

สำหรับเว็บขนาดใหญ่ การวิเคราะห์ Log คือวิธีเดียวที่จะรู้ว่างบการเก็บข้อมูลถูกใช้ไปกับหน้าที่สร้างรายได้ หรือถูกผลาญไปกับหน้ากรองสินค้าที่มีนับหมื่นแบบ

สิ่งที่ต้องเตรียม

  • สิทธิ์เข้าถึง Log ของเว็บเซิร์ฟเวอร์
  • Log ย้อนหลังอย่างน้อย 7 วัน ยิ่งมากยิ่งดี
ls -lh /var/log/nginx/access.log*
sudo wc -l /var/log/nginx/access.log

ขั้นตอนที่ 1: หาคำขอของ Googlebot

sudo grep -i 'googlebot' /var/log/nginx/access.log | wc -l

# ดูตัวอย่าง
sudo grep -i 'googlebot' /var/log/nginx/access.log | head -3

รูปแบบมาตรฐานของ Nginx คือ IP, เวลา, คำขอ, รหัสตอบกลับ, ขนาด, ผู้อ้างอิง, และ User-Agent

ขั้นตอนที่ 2: ตรวจว่าเป็น Googlebot จริง

ใครก็ปลอม User-Agent เป็น Googlebot ได้ วิธีตรวจที่ถูกต้องคือ Reverse DNS แล้ว Forward DNS กลับ

#!/bin/bash
# ตรวจ IP ที่อ้างว่าเป็น Googlebot
sudo grep -i 'googlebot' /var/log/nginx/access.log \
  | awk '{print $1}' | sort -u | head -20 \
  | while read -r ip; do
      host=$(dig +short -x "$ip" | sed 's/\.$//')
      if [[ "$host" =~ \.(googlebot|google)\.com$ ]]; then
        back=$(dig +short "$host")
        if [ "$back" = "$ip" ]; then
          echo "จริง   $ip  ($host)"
        else
          echo "ปลอม   $ip  (forward ไม่ตรง)"
        fi
      else
        echo "ปลอม   $ip  ($host)"
      fi
    done

บอตปลอมที่แอบอ้างมักเป็นเครื่องมือขูดข้อมูล ควรบล็อกเพราะกินทรัพยากรโดยไม่ให้ประโยชน์

ขั้นตอนที่ 3: ดูว่า Googlebot เข้าหน้าไหนบ่อยที่สุด

sudo grep -i 'googlebot' /var/log/nginx/access.log \
  | awk '{print $7}' \
  | sed 's/?.*//' \
  | sort | uniq -c | sort -rn | head -30

นี่คือรายงานที่สำคัญที่สุด ถามตัวเองสองข้อ

  • หน้าที่สำคัญที่สุดของธุรกิจอยู่ในรายการต้น ๆ หรือไม่
  • มีหน้าที่ไม่ควรถูกเก็บข้อมูลติดอันดับสูงหรือไม่ เช่น หน้าผลค้นหาภายใน หน้ากรองสินค้า หน้าปฏิทิน

ดูเฉพาะ URL ที่มีพารามิเตอร์ ซึ่งมักเป็นตัวผลาญงบประมาณ

sudo grep -i 'googlebot' /var/log/nginx/access.log \
  | awk '{print $7}' | grep '?' \
  | sed 's/=[^&]*/=X/g' \
  | sort | uniq -c | sort -rn | head -20

คำสั่งนี้แทนค่าพารามิเตอร์ด้วย X เพื่อจัดกลุ่มรูปแบบที่เหมือนกัน หากเห็นรูปแบบใดมีจำนวนมหาศาล นั่นคือจุดที่ต้องจัดการ

ขั้นตอนที่ 4: ดูรหัสตอบกลับที่ Googlebot ได้รับ

sudo grep -i 'googlebot' /var/log/nginx/access.log \
  | awk '{print $9}' | sort | uniq -c | sort -rn

สัดส่วนที่ดีคือ 200 เป็นส่วนใหญ่ 301 บ้าง และ 404 น้อยมาก

หาหน้าที่ตอบ 404 ให้ Googlebot

sudo grep -i 'googlebot' /var/log/nginx/access.log \
  | awk '$9 == 404 {print $7}' \
  | sort | uniq -c | sort -rn | head -20

หาหน้าที่ตอบ 5xx ซึ่งร้ายแรงที่สุด เพราะทำให้ Google ลดความถี่ในการเก็บข้อมูลทั้งเว็บ

sudo grep -i 'googlebot' /var/log/nginx/access.log \
  | awk '$9 ~ /^5/ {print $9, $7}' | sort | uniq -c | sort -rn

ขั้นตอนที่ 5: ดูแนวโน้มตามเวลา

# จำนวนคำขอของ Googlebot ต่อวัน
sudo zgrep -h -i 'googlebot' /var/log/nginx/access.log* \
  | awk -F'[][]' '{print $2}' | cut -d: -f1 \
  | sort | uniq -c

การลดลงอย่างฉับพลันมักหมายถึงปัญหา เช่น เซิร์ฟเวอร์ตอบช้าลง มีข้อผิดพลาดจำนวนมาก หรือ robots.txt ถูกแก้โดยไม่ตั้งใจ

# ดูว่า Googlebot เข้ามาดู robots.txt เมื่อไรและได้อะไร
sudo grep 'robots.txt' /var/log/nginx/access.log | tail -10

ขั้นตอนที่ 6: วัดเวลาตอบสนองที่ Googlebot เจอ

ต้องเพิ่มเวลาตอบสนองเข้าไปในรูปแบบ Log ก่อน

sudo nano /etc/nginx/nginx.conf
log_format seo '$remote_addr - [$time_local] "$request" '
               '$status $body_bytes_sent "$http_referer" '
               '"$http_user_agent" rt=$request_time uct=$upstream_connect_time '
               'urt=$upstream_response_time';

access_log /var/log/nginx/access.log seo;
sudo nginx -t && sudo systemctl reload nginx

จากนั้นวิเคราะห์

sudo grep -i 'googlebot' /var/log/nginx/access.log \
  | grep -oP 'rt=\K[0-9.]+' \
  | awk '{s+=$1; n++; if($1>max) max=$1} END {printf "เฉลี่ย %.3f วินาที  สูงสุด %.3f  จาก %d คำขอ\n", s/n, max, n}'

เกณฑ์ที่ควรรักษาคือเวลาตอบสนองเฉลี่ยต่ำกว่า 500 มิลลิวินาที หากสูงกว่านั้น Google จะลดความถี่การเก็บข้อมูลลงเพื่อไม่ให้เซิร์ฟเวอร์รับภาระหนักเกินไป

ขั้นตอนที่ 7: เทียบกับ Sitemap

หา URL ที่อยู่ใน Sitemap แต่ Googlebot ไม่เคยเข้าเลย

# ดึง URL จาก sitemap
curl -s https://example.com/sitemap.xml | grep -oP '(?<=<loc>)[^<]+' \
  | sed 's|https://example.com||' | sort -u > /tmp/sitemap-urls.txt

# ดึง URL ที่ Googlebot เคยเข้า
sudo zgrep -h -i 'googlebot' /var/log/nginx/access.log* \
  | awk '{print $7}' | sed 's/?.*//' | sort -u > /tmp/crawled-urls.txt

# หาที่อยู่ใน sitemap แต่ไม่เคยถูกเก็บข้อมูล
comm -23 /tmp/sitemap-urls.txt /tmp/crawled-urls.txt | head -30

URL เหล่านี้คือที่ควรเพิ่มลิงก์ภายในให้เข้าถึงง่ายขึ้น

และในทางกลับกัน หา URL ที่ถูกเก็บข้อมูลแต่ไม่อยู่ใน Sitemap

comm -13 /tmp/sitemap-urls.txt /tmp/crawled-urls.txt | head -30

หากมีจำนวนมาก แปลว่ามี URL ที่ไม่ควรมีอยู่ถูกสร้างขึ้น ควรตรวจสอบและจัดการ

ขั้นตอนที่ 8: ลงมือแก้ตามที่พบ

บล็อก URL ที่ผลาญงบประมาณ

User-agent: *
Disallow: /*?orderby=
Disallow: /*?filter_
Disallow: /*?s=
Disallow: /search/
Disallow: /*?add-to-cart=

บล็อกบอตปลอมที่ระบุได้

map $http_user_agent $bad_bot {
    default 0;
    ~*(AhrefsBot|SemrushBot|MJ12bot|DotBot) 1;
}

server {
    if ($bad_bot) { return 403; }
}

พิจารณาให้ดีก่อนบล็อกบอตของเครื่องมือ SEO เพราะทีมของคุณเองอาจใช้เครื่องมือนั้นอยู่

ปัญหาที่พบบ่อย

ไม่เห็น Googlebot ใน Log เลย

หากเว็บอยู่หลัง Cloudflare หรือ CDN คำขอของ Googlebot อาจถูกตอบจากแคชโดยไม่ถึงเซิร์ฟเวอร์ ให้ดู Log ที่ฝั่ง CDN แทน หรือตั้งให้ไม่แคชคำขอจากบอต

IP ทุกรายการเป็น IP เดียวกัน

เว็บอยู่หลัง Proxy ตั้งให้บันทึก IP จริงด้วย $http_x_forwarded_for และตั้ง set_real_ip_from ให้ถูกต้อง

Log ใหญ่จนวิเคราะห์ไม่ไหว

แยก Log ของบอตออกมาต่างหากตั้งแต่ต้น

map $http_user_agent $is_bot {
    default 0;
    ~*(googlebot|bingbot) 1;
}
access_log /var/log/nginx/bots.log seo if=$is_bot;

ต้องการวิเคราะห์แบบต่อเนื่อง

ส่ง Log เข้าระบบรวม Log ตามคู่มือเรื่อง rsyslog แล้วสร้าง Dashboard ใน Grafana เพื่อดูแนวโน้มโดยไม่ต้องรันคำสั่งทุกครั้ง

ต้องการให้ทีมวิศวกรช่วยวิเคราะห์การเก็บข้อมูลของเว็บ ติดต่อ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security