1682 字
8 分鐘

Pagefind 怎麼排除不該搜尋的內容?data-pagefind-ignore 與 exclude_selectors

Pagefind 預設會從頁面 body 建立搜尋內容,但網站導覽、分享工具、重複標題、推薦文章與輔助文字未必適合出現在搜尋結果。要排除它們,先分清楚三種邊界:data-pagefind-body 定義「哪些內容可以被索引」,data-pagefind-ignore 排除索引區域內的一個元素,exclude_selectors 則在 CLI 建置階段套用全站 CSS selector 規則。

直接答案是:先用 data-pagefind-body 圍住文章主體,再用 data-pagefind-ignore 排除局部元件;只有當規則是模板或全站共用政策時,才放進 pagefind.ymlexclude_selectors。每次調整都要重跑 production build,並用實際搜尋詞確認沒有誤刪整頁。

先用 data-pagefind-body 定義索引根#

data-pagefind-body 是 allowlist 邊界,不是「在頁面上加一個提示」。一旦 Pagefind 在網站中看到這個標記,未標記的頁面可能不再符合索引條件;因此所有應該可搜尋的 layout 都要一致處理。

最小 HTML 結構可以是:

<body>
<header>網站導覽</header>
<main data-pagefind-body>
<article>
<h1>Pagefind 搜尋索引</h1>
<p>這段文章內容應該可以被搜尋。</p>
</article>
</main>
</body>

內建的 navfooterscript 等結構會被 Pagefind 跳過,但自訂 sidebar、CTA、標籤列或推薦模組不一定符合你的搜尋意圖。放置 body marker 前,先列出首頁、文章、tag、archive 與其他 layout;不要只改一種文章模板,最後讓首頁反而從索引消失。

ZeroOne 目前的 Markdown 元件以 data-pagefind-body 包住文章內容,文章頁標題另用 Pagefind 的 weight 與 metadata 標記。要調整自己的模板,可先查實際產出的 Astro 元件:

Terminal window
rg -n 'data-pagefind-body|data-pagefind-ignore|data-pagefind-weight|data-pagefind-meta' \
src astro.config.mjs

data-pagefind-ignore 適合排除局部內容#

當一個區塊位於已索引的 body 裡,使用 data-pagefind-ignore 排除它與子元素的正文:

<main data-pagefind-body>
<article>
<h1>文章主體</h1>
<p>這段文字會進入索引。</p>
</article>
<aside data-pagefind-ignore>
<h2>推薦文章</h2>
<p>這段文案不應影響正文搜尋。</p>
</aside>
</main>

預設的 data-pagefind-ignore 會排除元素及其子內容的索引文字,但 Pagefind 仍可能處理其中的 filter、metadata、預設 title 或圖片資訊。若整個區塊連 Pagefind 的其他處理都不應該發生,才使用:

<aside data-pagefind-ignore="all">
<h2>這個區塊不提供任何 Pagefind metadata</h2>
</aside>

all 不是更安全的預設值。它可能同時移除你原本想保留的 metadata 或 filter;先從一般 ignore 開始,再用 build 後的索引結果確認是否需要提高排除層級。

data-pagefind-ignoreexclude_selectors 怎麼選#

這兩者都能減少噪音,但維護位置不同:

情境建議工具原因
某個元件自己知道哪段內容不該被搜尋data-pagefind-ignore決策和元件 markup 放在一起,重構時較容易一起更新
所有頁面的 .site-chrome 都不應進索引exclude_selectors把規則集中在 Pagefind build 設定,不必重複改每個模板
只有文章主體可搜尋data-pagefind-body直接建立索引 allowlist,避免把 layout 雜訊納入
只想排除整頁的一種檔案或路徑CLI 的 site/glob 設定這是頁面發現問題,不是局部 HTML 排除問題

pagefind.yml 可以集中放全站規則:

exclude_selectors:
- '.site-chrome'
- '.recommendation-panel'
- '[data-no-search]'

Pagefind 的 selector 會影響匹配元素及其子元素。若規則只屬於一個元件,優先使用 attribute;若是所有頁面都一致的 build policy,才用 exclude_selectors。兩層並用沒有問題,但要在 code review 中說清楚哪一層擁有排除規則。

先檢查 metadata 是否被一起排除#

搜尋正文和搜尋結果 metadata 是兩個不同問題。data-pagefind-ignore 的預設行為可能仍讓 Pagefind 處理區塊中的部分 metadata,而 data-pagefind-ignore="all" 則連這些資訊都排除。當你用標題、圖片或自訂 data attribute 製作結果卡片時,不能只用「搜尋不到該段文字」判斷設定正確。

可以準備三種測試詞:

  1. 只出現在文章主體的詞,確認它仍能找到目標頁。
  2. 只出現在 sidebar 或 CTA 的詞,確認它不會把目標頁推成不相關結果。
  3. 只出現在被排除區塊標題或 metadata 的詞,確認 indexall 的差異符合預期。

如果是多語言網站,也要分別從繁體中文與英文路徑測試;語言欄位、Pagefind index 與結果頁路徑不能只靠同一個語言的結果推論。相關的 Astro 版本升級也可參考 Astro 7 升級與建置清單 中的 Pagefind 輸出檢查。

用 Astro build 驗證索引邊界#

先確認專案的建置順序,再執行完整流程。ZeroOne 使用 Astro build 後建立 Pagefind index:

Terminal window
pnpm build
find dist -maxdepth 3 -type f | sort | rg 'pagefind|index\.html|posts'

不要直接編輯 dist 來修正搜尋結果。這裡的目的只是確認:

  • 應搜尋的 layout 都產生 data-pagefind-body 或等效內容。
  • 不應搜尋的導覽、推薦與工具區塊仍在 HTML,但不會污染正文索引。
  • Pagefind assets 與 index 在 production build 中產生,且路徑沒有因 adapter 或 base 設定改變。

若一加上 body marker 就有頁面消失,先回到所有 page layout 補齊索引邊界;若只有特定元件污染結果,再將 selector 縮小到該元件,避免把整個 main 或文章頁一起排除。

常見的排除錯誤#

  • data-pagefind-ignore 放在 <body>,結果整個網站內容都被排除。
  • 只在一種文章模板加 data-pagefind-body,首頁或其他 layout 因未標記而不再索引。
  • data-pagefind-ignore="all" 排除 CTA,卻同時移除了結果卡片需要的 metadata。
  • exclude_selectors 排除太寬的父層 selector,連文章正文一起移除。
  • 只看瀏覽器畫面,不檢查 build 後的 Pagefind index,誤以為「元素仍在 HTML」就代表它能被搜尋。

排除規則的完成條件不是頁面看起來沒變,而是搜尋結果同時保留正確正文、移除預期噪音,並且沒有讓其他 layout 悄悄退出索引。

常見問題#

Q: data-pagefind-ignore 會讓整個頁面從搜尋消失嗎?#

A: 不會。它只排除被標記的元素及子元素;要控制整頁是否可搜尋,應處理 data-pagefind-body 的頁面邊界或 Pagefind 的頁面發現設定。

Q: 為什麼加了 data-pagefind-body 後,另一個頁面不見了?#

A: body marker 會把索引邊界變成全站需要一致遵守的規則。檢查消失頁面使用的 layout,為應該可搜尋的區域補上 marker,再重新執行 production build。

Q: 什麼時候該用 exclude_selectors#

A: 當排除規則是全站共用的 CSS selector 政策,而不是某個元件的內容決策時使用。若規則只屬於單一元件,把 data-pagefind-ignore 放在 markup 中通常更容易維護。

參考資料:

Pagefind Docs:Indexing

Pagefind Docs:Config Options

Pagefind 怎麼排除不該搜尋的內容?data-pagefind-ignore 與 exclude_selectors
https://laplusda.com/posts/pagefind-exclude-content-search/
作者
Zero
發佈於
2026-08-14
許可協議
CC BY-NC-SA 4.0
這篇文章有幫助嗎?

回報錯字、失效連結,或告訴我你想看的延伸主題。