做入口页时,很多人会想换个花样:把目标 URL 塞进 iframe、图片地址、CSS 背景图,甚至用脚本动态拼出来。这样能不能被搜索蜘蛛发现?答案取决于你把 URL 放在什么位置——有的只是被当成资源请求一次,有的才可能进入真正的页面发现流程。
先分清两件事:资源请求和页面发现
搜索蜘蛛在抓取一个页面时,会做两件不同的事。一是请求页面需要的外部资源,比如图片、样式表、脚本;二是从页面里提取可以继续抓取的 URL 清单,再排队去抓。资源请求只为了把页面完整渲染出来,并不等于搜索引擎会去解析那个资源内部的内容。所以判断某种写法行不行,关键是看它触发的是前者还是后者。
iframe:有机会被继续抓,但归属容易乱
iframe 的 src 指向的页面本身是一个独立 URL,搜索蜘蛛通常会把 iframe 内部的文档当作单独页面来抓取。如果目标链接是写在那个 iframe 页面里的标准 a 标签,那么这条路径是有机会被继续发现的。
但要注意几个前提:iframe 里的页面不能被 robots.txt 屏蔽,不能返回 noindex,也不能要求登录或校验 Cookie,否则抓取链路在第一步就断了。另外 iframe 内容在权重和来源归属上和父页面并不共享,用它当主力入口,稳定性和可控性都不如直接把链接写在主文档里。
img 的 src 和 srcset:多半只抓一次图片
img 上的地址一般会被当作图片资源请求,用于图片索引。如果这个地址指向的其实是一个 HTML 页面,多数搜索蜘蛛只会把它当成资源取一次,不会像抓普通网页那样再解析页面里的链接。也就是说,把目标 URL 塞进 img src,很可能只换来一次资源请求,不会形成链式发现。
srcset 里列出的多个地址同理,属于同一张图的不同尺寸,不会变成多个可抓页面。
CSS 背景图和 @import:基本不属于发现路径
用 CSS 的 background-image 放一个地址,通常只在渲染阶段被请求,搜索引擎不会把它当作可索引页面处理,也不会顺着它去解析链接。@import 引入的样式表也属于资源,不是页面发现入口。
脚本动态插入的链接:有条件
主流搜索引擎会执行一定程度的 JavaScript,动态生成的 a 标签是有机会被发现的。但能不能稳定发现,取决于脚本复杂度、渲染预算以及是否需要用户交互。如果链接必须点击按钮之后才出现,被抓到的概率会明显下降。入口页如果全靠脚本输出链接,建议在 HTML 里保留一份静态版本兜底。
更稳妥的做法
- 目标 URL 用标准的 a 标签写进 HTML,href 是明文地址,可点击可复制。
- 不要用 onclick 加 location.href 之类的写法代替 a 标签。
- 单页链接数量控制在合理范围,避免一页堆上千条。
- iframe、图片、脚本只能作为补充手段,不适合当唯一入口。
- 配合 sitemap 和站内已有的正常链接,让 URL 的发现路径更稳。
提示:无论链接用什么方式呈现,入口页能被稳定抓取、目标 URL 返回正常状态码,才是后面讨论收录的前提。发现不了,就谈不上抓取。
怎么快速自查
- 查看服务器日志,确认搜索蜘蛛有没有请求过入口页本身。
- 看目标 URL 有没有出现在的抓取记录里,而不是只看到图片或样式被请求。
- 用抓取工具或浏览器无痕模式关闭脚本,检查链接是否还在 HTML 源码里。
- 如果关闭脚本后链接全部消失,说明入口页对脚本依赖过重,需要改造。
说到底,链接的可发现性来自清晰、稳定的 HTML 结构。把目标 URL 老老实实写成 a 标签,比绕道 iframe、图片或样式表要可靠得多,后续排查问题也简单得多。