做站点运营的人大多遇到过这种情况:某天在抓取日志里看到一个陌生地址,点开一看,是半年前开发时留下的测试页,或者编辑还没写完的草稿。这类页面平时没人访问,却可能躺在主域名下面,静静等着被外部链接、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、栏目列表或内链里本来就指向这些地址,只处理页面本身,下次生成还会再冒出来。
小结
预览页和测试目录的问题不在于技术难度,而在于有没有人定期看一眼。把它纳入每月一次的结构检查,配合发布前的目录比对,就能用很小的成本避免大部分麻烦。站点运营的很多工作都是这样:不是做加法,而是把不该出现的东西挡在门外。