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

PHP 判斷 AJAX 請求與一般請求的兩種方法與 SEO 最佳實踐

     編輯:PHP 綜合知識

前言

在現代 Web 開發中,常需區分 AJAX 請求與一般瀏覽器請求,以回傳不同內容(如 AJAX 回傳 JSON/片段,一般請求回傳完整頁面)。本文介紹兩種判斷方式,並說明為何第二種方法更利於 SEO。

方法一:透過 GET 參數判斷(不推薦用於 SEO 場景)

// 前端 AJAX 請求帶上 ?ajax=1
if (isset($_GET['ajax'])) {
    // AJAX 請求邏輯
} else {
    // 一般請求邏輯
}

缺點:URL 不同,搜尋引擎爬蟲無法取得完整頁面內容,不利 SEO;且無法在同一 URL 同時服務使用者與爬蟲。

方法二:檢查 HTTP_X_REQUESTED_WITH 標頭(推薦,需 jQuery)

jQuery 的 $.ajax、$.get、$.post 會自動送出 X-Requested-With: XMLHttpRequest 標頭。

if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) 
    && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') {
    // AJAX 請求:回傳精簡內容、JSON 或局部 HTML
} else {
    // 一般請求:回傳完整頁面(含版面、導航、SEO 標籤)
}

實務應用:同一 URL 服務使用者與搜尋引擎

  • 使用者操作:透過 AJAX 載入局部內容,體驗流暢。
  • 搜尋引擎爬蟲:直接請求 URL,獲得完整語意化 HTML,利於索引。

此模式符合 Progressive Enhancement 原則。

注意事項

  • 前提條件:前端必須使用 jQuery(或手動加上該標頭)。
  • iframe 限制:若 AJAX 請求在 iframe 中發起,瀏覽器不會送出 X-Requested-With,無法判斷。需改用 Token 或自訂標頭。
  • 偽造風險:標頭可被偽造,敏感操作仍需配合 CSRF Token 驗證。

完整程式碼範例

function isAjaxRequest(): bool {
    return isset($_SERVER['HTTP_X_REQUESTED_WITH'])
        && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';
}

if (isAjaxRequest()) {
    header('Content-Type: application/json');
    echo json_encode(['status' => 'ok', 'data' => $partialContent]);
} else {
    // 載入完整版面模板
    include 'layout/header.php';
    echo $fullContent;
    include 'layout/footer.php';
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved