做站点运营的人大多遇到過這種情况:某天在抓取日誌里看到一個陌生地址,点開一看,是半年前開發时留下的測試頁,或者編輯還没寫完的草稿。這類頁面平时没人訪問,却可能躺在主域名下面,静静等着被外部連結、sitemap 或站内某個错誤連結带到蜘蛛面前。
预览頁通常從哪些地方漏出去
预览和測試頁面很少是故意放出去的,多數是流程上的顺手操作留下的痕迹:
- CMS 自带的预览功能,地址形如 ?preview=1、/preview/xxx,只要知道連結就能打開,不校驗登入狀態。
- 編輯器自動儲存的草稿被意外设為公開,栏目列表里看不到,但 URL 可以訪問。
- 開發同学為了图方便,把 test.html、demo/、new/ 這類目錄直接传到網站根目錄。
- 改版时把舊站整站複製到 /old/ 或子目錄,上线後忘了删。
- 資料库备份、压缩包、編輯器临时文件(.bak、.swp、.zip)留在了可訪問目錄里。
這些問题單獨看都不算大,但它們的共同点是:没有導航入口,也没有被纳入日常检查,所以往往存在很久才被發現。
漏出去之後會带来什么麻烦
比較直接的影响有三類。一是内容重复:測試頁常常是正式頁面的複製品,标题和正文几乎一样,两個地址同时存在會让搜尋引擎难以判断哪個是正式版本。二是浪費抓取资源:蜘蛛来過一次没價值的頁面,就少了一次訪問有效内容的机會。三是用戶体驗受损,訪客從外鏈或搜尋结果点進来,看到的是没配图、没排版、寫着「測試」两個字的半成品。
判断标准很简單:這個地址如果被陌生人看到,你是否愿意為它的内容负责?如果答案是否定的,它就不该出現在公開可訪問的位置。
一份可执行的自查清單
- 用服務器或 CDN 日誌,筛出最近一個月内被訪問過的、不在導航和 sitemap 里的地址。
- 检查根目錄和常见子目錄,看是否存在 test、demo、bak、old、tmp 這類命名的文件或文件夹。
- 抽几個 CMS 预览地址,登出登入後再打開,確認是否仍會返回内容。
- 检查編輯角色權限,確認「草稿」「待审核」狀態的文章不會生成公開可訪問的静態頁。
- 確認备份文件、日誌文件、配置文件不在 Web 可訪問目錄内。
把预览环境隔离開
比起事後清理,更省事的做法是從源头隔离:
- 预览站放到獨立子域名,並在该子域名的 robots.txt 中整体禁止抓取,同时加上 HTTP 基础認證。
- 必须放在主域名下的预览,用服務器規則限制来源 IP 或校驗登入 Cookie,未通過时直接返回 403。
- 開發目錄统一放在内網或本地,通過反向代理訪問,不要直接传到生产站点目錄。
- 發布流程里加一步比對:上线前對照目錄清單,確認没有多出計划外的文件。
已经漏出去了怎么办
如果確認某個半成品頁面已经能被外部訪問,處理顺序建议是:先让頁面返回 noindex,並且保持頁面本身可以正常訪問一段時間,让蜘蛛有机會讀到這個标记;之後再决定是改成 301 跳到正式頁面,還是直接刪除。需要注意两点:用 robots.txt 屏蔽抓取,蜘蛛就讀不到 noindex;用 401 或 403 挡住訪問,同样讀不到。想让頁面登出索引,前提是蜘蛛進得去、看得到标记。
另外,別忘了把導致泄露的入口一並修掉。如果 sitemap、栏目列表或内鏈里本来就指向這些地址,只處理頁面本身,下次生成還會再冒出来。
小结
预览頁和測試目錄的問题不在于技術难度,而在于有没有人定期看一眼。把它纳入每月一次的结构检查,配合發布前的目錄比對,就能用很小的成本避免大部分麻烦。站点运营的很多工作都是這样:不是做加法,而是把不该出現的東西挡在门外。