首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 記錄搜尋引擎來訪關鍵字:解析 HTTP_REFERER 實作指南

     編輯:PHP 相關知識

為了 SEO 分析,記錄使用者從搜尋引擎點擊進站時使用的關鍵字是常見需求。本文示範如何解析 $_SERVER['HTTP_REFERER'],識別主流搜尋引擎並提取查詢參數。

核心邏輯

  1. 取得 HTTP_REFERER(注意:用戶端可偽造、隱私模式可能為空)。
  2. 使用 parse_url() 拆解 URL,取得 host 與 query。
  3. 使用 parse_str() 將查詢字串轉為陣列。
  4. 對照已知搜尋引擎域名與其關鍵字參數名(如 Google 為 q、百度為 word)。
  5. 提取關鍵字並儲存(資料庫、日誌等)。

完整實作代碼

<?php
function getSearchKeyword(): array {
    $rfr = $_SERVER['HTTP_REFERER'] ?? '';
    if (!$rfr) {
        return ['keyword' => '', 'engine' => 'direct'];
    }

    $parts = parse_url($rfr);
    if (!isset($parts['host'], $parts['query'])) {
        return ['keyword' => '', 'engine' => 'unknown'];
    }

    parse_str($parts['query'], $queryParams);
    $host = strtolower($parts['host']);

    // 搜尋引擎域名 => 關鍵字參數名 對照表
    $engineParams = [
        'baidu.com'       => 'wd',      // 百度現用 wd,舊版 word
        'google.com'      => 'q',
        'google.com.tw'   => 'q',
        'bing.com'        => 'q',
        'yahoo.com'       => 'p',
        'search.yahoo.com'=> 'p',
        'so.com'          => 'q',       // 360 搜尋
        'sogou.com'       => 'query',
        'duckduckgo.com'  => 'q',
        'yandex.com'      => 'text',
        'ask.com'         => 'q',
    ];

    $keyword = '';
    $engine  = 'other';

    foreach ($engineParams as $domain => $param) {
        if (strpos($host, $domain) !== false) {
            $keyword = $queryParams[$param] ?? '';
            $engine  = $domain;
            break;
        }
    }

    // URL 解碼關鍵字(可能為編碼)
    $keyword = urldecode($keyword);

    return ['keyword' => $keyword, 'engine' => $engine];
}

// 使用範例
$result = getSearchKeyword();
if ($result['keyword']) {
    echo "引擎: {$result['engine']}, 關鍵字: {$result['keyword']}<br>";
    // 寫入資料庫
    // $sql = "INSERT INTO visit_log (engine, keyword, visit_time) VALUES (?, ?, NOW())";
    // $stmt = $pdo->prepare($sql);
    // $stmt->execute([$result['engine'], $result['keyword']]);
} else {
    echo '非搜尋引擎進站或無關鍵字<br>';
}
?>

關鍵點補充

  • 百度參數變更:早期用 word,現多用 wd,建議兩者皆檢查:$queryParams['wd'] ?? $queryParams['word']。
  • HTTPS 與 Referrer Policy:現代瀏覽器預設 strict-origin-when-cross-origin,同站會傳完整 URL,跨站僅傳來源域名(無查詢參數),導致無法取得關鍵字。此為瀏覽器隱私機制,無法從伺服器端解決。
  • 替代方案:整合 Google Search Console API、Bing Webmaster API 取得搜尋查詢資料,較準確且不受 Referrer 限制。
  • 資料儲存建議:記錄 keyword、engine、landing_page、visit_time、user_agent,便後續分析。

擴充:支援更多引擎

可維護一個設定檔 search_engines.php 回傳陣列,方便隨時新增/修改:

<?php // search_engines.php
return [
    'google'      => ['domains' => ['google.com', 'google.com.tw'], 'param' => 'q'],
    'baidu'       => ['domains' => ['baidu.com'], 'param' => ['wd', 'word']],
    'bing'        => ['domains' => ['bing.com'], 'param' => 'q'],
    // ...
];
?>

主程式載入設定檔迴圈比對,提高維護彈性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved