Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

ตรวจจับ Search Engine Bots ใน PHP

ตรวจจับ Bot/Crawler ของ Search Engine ผ่าน User-Agent String เพื่อจัดการ Traffic, Analytics, หรือแสดงเนื้อหาแตกต่าง (Cloaking - ต้องระวัง Policy ของ Google)

วิธีพื้นฐาน: strpos + strtolower

function isBot($userAgent = null) {
    $userAgent = $userAgent ?? ($_SERVER['HTTP_USER_AGENT'] ?? '');
    $userAgent = strtolower($userAgent);
    
    $botPatterns = [
        'googlebot', 'bingbot', 'slurp', 'duckduckbot',
        'baiduspider', 'yandexbot', 'facebot', 'twitterbot',
        'linkedinbot', 'whatsapp', 'telegrambot', 'applebot',
        'semrushbot', 'ahrefsbot', 'mj12bot', 'dotbot',
    ];
    
    foreach ($botPatterns as $bot) {
        if (strpos($userAgent, $bot) !== false) {
            return true;
        }
    }
    return false;
}

// ใช้งาน
if (isBot()) {
    // Bot detected
    // อาจ: ไม่นับ View, ไม่แสดง Ads, ให้ Crawl แบบ Static
}

วิธีที่ 2: Regex Pattern (ครอบคลุมกว่า)

function isBotRegex($userAgent = null) {
    $userAgent = $userAgent ?? ($_SERVER['HTTP_USER_AGENT'] ?? '');
    
    // Pattern รวม Bot/Crawler/Spider ทั่วไป
    $pattern = '/bot|crawl|slurp|spider|mediapartners|teoma|ia_archiver|facebookexternalhit|twitterbot|linkedinbot|whatsapp|telegram/i';
    
    return (bool)preg_match($pattern, $userAgent);
}

วิธีที่ 3: ใช้ Library (แนะนำสำหรับ Production)

// Composer: require jaybizzle/crawler-detect
use Jaybizzle\CrawlerDetect\CrawlerDetect;

$crawlerDetect = new CrawlerDetect();

if ($crawlerDetect->isCrawler()) {
    $botName = $crawlerDetect->getCrawler(); // ชื่อ Bot ที่ตรวจพบ
    // ...
}

// รายการ Bot ที่รองรับ 1000+ ตัว อัปเดตอยู่เสมอ

รายชื่อ Bot สำคัญที่ควรรู้

BotUser-Agent KeywordSearch Engine
GooglebotgooglebotGoogle
BingbotbingbotBing
SlurpslurpYahoo
DuckDuckBotduckduckbotDuckDuckGo
BaiduspiderbaiduspiderBaidu (China)
YandexBotyandexbotYandex (Russia)
FacebookfacebookexternalhitSocial Preview
TwittertwitterbotSocial Preview
LinkedInlinkedinbotSocial Preview

⚠️ ข้อควรระวัง: Cloaking และ SEO

  • Google Webmaster Guidelines ห้าม Cloaking: แสดงเนื้อหาแตกต่างให้ Bot และ User
  • ใช้ได้: ไม่นับ Page View, ไม่แสดง Analytics/Ads, ให้ Crawl หน้า Static แทน Dynamic
  • ห้าม: แสดงเนื้อหา SEO Stuffing ให้ Bot, ซ่อน Link ให้ User

การตรวจสอบแบบ Manual (Testing)

// ทดสอบด้วย cURL
// curl -A "Googlebot/2.1 (+https://www.google.com/bot.html)" https://yoursite.com/

// หรือตั้งค่าใน PHP สำหรับทดสอบ
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (compatible; Googlebot/2.1; +https://www.google.com/bot.html)';

Robots.txt vs Bot Detection

Bot Detection ใน PHP เป็นการจัดการที่ Application Level ส่วน robots.txt เป็นคำสั่งที่ Bot อ่านก่อนเข้ามา ควรใช้ทั้งคู่:

# robots.txt
User-agent: *
Disallow: /admin/
Disallow: /api/
Allow: /

Sitemap: https://example.com/sitemap.xml