PHP 实现 Googlebot 访问日志记录与通知
本文介绍如何使用 PHP 代码自动检测 Google 爬虫(Googlebot)对网站的访问,并通过电子邮件实时发送包含 URL、时间及查询参数的访问通知,便于站长监控搜索收录情况。
核心逻辑与原理
在 Web 服务器环境中,每个 HTTP 请求都会携带特定的请求头信息。其中 HTTP_USER_AGENT 字段标识了发起请求的客户端软件类型。Google 爬虫在访问网站时,其 User-Agent 字符串中通常包含 googlebot 关键字。通过 PHP 解析该变量并进行正则匹配,即可判断当前访客是否为 Google 爬虫。
一旦确认是 Googlebot 访问,脚本即可捕获当前的环境参数(如 URL、时间),并利用 PHP 内置的邮件函数将这一关键事件记录下来发送给管理员。
完整实现代码
以下是一段经过整理的 PHP 代码示例,用于实现上述功能。请将其放置在你希望监控的文件顶部,或引入到公共配置文件中。
<?php
// 设置接收通知的管理员邮箱
$email = "admin@example.com";
// 检查 User-Agent 是否包含 googlebot (不区分大小写)
if(eregi("googlebot", $HTTP_USER_AGENT)) {
// 构建完整的当前页面 URL
if ($QUERY_STRING != "") {
$url = "http://" . $SERVER_NAME . $PHP_SELF . "?" . $QUERY_STRING;
} else {
$url = "http://" . $SERVER_NAME . $PHP_SELF;
}
// 获取当前访问时间
$date = date("F j, Y, g:i a");
// 发送通知邮件
// 标题格式:[Googlebot] 被访问的URL
// 内容格式:访问时间 - Google 抓取了某URL
mail($email, "[Googlebot] $url", "$date - Google crawled $url");
}
?>
注意事项与现代兼容性修正
虽然上述代码展示了核心逻辑,但在现代 PHP 环境(PHP 7.0+ 及 PHP 8.x)中,直接使用全局变量(如 $HTTP_USER_AGENT, $SERVER_NAME, $PHP_SELF)或旧版函数(eregi)可能已不再兼容或被弃用。为了确保代码在现代服务器上正常运行,建议采用以下更标准的写法:
<?php
// 1. 使用超全局数组 $_SERVER 获取用户代理
$user_agent = $_SERVER['HTTP_USER_AGENT'] ?? '';
// 2. 使用 preg_match 替代已移除的 eregi (现代表示法)
if (stripos($user_agent, 'googlebot') !== false) {
// 3. 构建标准 URL
$protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http';
$host = $_SERVER['HTTP_HOST'];
$uri = $_SERVER['REQUEST_URI'];
$full_url = $protocol . '://' . $host . $uri;
// 4. 定义接收邮箱
$admin_email = 'admin@example.com';
// 5. 构造邮件主题与内容
$subject = '[Googlebot Access] ' . $full_url;
$message = sprintf(
"%s\n\nGoogle Crawler visited: %s",
date('Y-m-d H:i:s'),
$full_url
);
// 6. 发送邮件 (确保服务器已配置 SMTP 或 Mail function)
// 注意:mail() 需要服务器环境支持,否则无法发送
@mail($admin_email, $subject, $message);
}
?>
部署与应用场景
- 监控索引状态: 当你更新重要页面但发现未被收录时,通过此脚本可以验证 Googlebot 是否真的来过,以及它看到的是否为最新版本。
- 排查收录延迟: 如果频繁收到邮件但页面未收录,可能需要检查robots.txt或页面质量。
- 安全提醒: 对于特定敏感页面,可以知道搜索引擎何时进行了爬行。
常见问题排错
Q: 为什么没有收到邮件?
A: 首先检查服务器的 mail() 函数是否正常配置(Linux 通常需要 Postfix/sendmail,Windows 需要配置 SMTP)。其次,检查垃圾邮件文件夹。最后,确认 $admin_email 是否正确且拥有写入权限。
Q: 如何区分不同类型的 Google 爬虫?
A: Google 有多个爬虫,如 Googlebot (网页), Googlebot-Image (图片), AdSense/AdsBot (广告)。可以通过扩展正则表达式来分别处理不同爬虫的报警策略。
Q: 性能影响大吗?
A: 极小。这段代码仅在命中条件时才执行数据库操作或网络 IO,正常用户访问几乎无额外开销。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









