说到“链接”,大部分人默认想的是 <a href>。但实际页面里,希望蜘蛛走到的地方,未必都写成了 a 标签:入口用图片、按钮用表单、内容区块用 iframe 嵌进去、跳转靠 meta refresh。这些写法在浏览器里都点得动、跳得走,到了蜘蛛那边却不一定被当成一条可抓取的链接。下面把常见情况分成三档来说:哪些相对稳定,哪些只能算补充,哪些基本不要指望。
稳定的那一档:a 标签里的 href
蜘蛛顺着链接爬行的基础,是一个能被解析出来的 href 属性。只要是 a 标签加 href,地址是正常的绝对或相对路径,没有靠脚本改写、没有被属性拼出来,它就是一个可靠的入口。锚文本会一并被读到,这也是判断目标页主题的参考之一。
所以真正该做的是:把重要入口都落成 a 标签。导航、面包屑、列表项标题、正文里的推荐位、页脚的关键栏目,都用 a,而不是用其他元素“模拟”出一个链接。
可能被读到的那些:可以补充,别当主路
iframe 的 src
iframe 里承载的页面地址写在 src 上,通常可以被发现。但要注意两点:一是 iframe 常被用来嵌第三方内容,这类 URL 抓不抓、收不收由对方站点决定;二是嵌进来的内容在页面上没有正常的链接上下文,对本站抓取路径的帮助有限。如果某个页面只能从 iframe 里进,最好在页面上补一个 a 链接。
图片、视频等资源地址
<img src>、<source srcset>、<video src> 这些同样会暴露地址,但它们指向的是资源文件,不是 HTML 页面。指望“图片被读到,详情页就被发现”并不靠谱。正确的写法是让 a 包住 img:链接写在 a 上,图片只是链接的外观。
head 里的 link 元素
<link> 能带各种 URL:rel="canonical"、rel="alternate"(多语言)、rel="next" 和 rel="prev" 等。它们的语义是“说明关系”,不是“这里有一个可以点的链接”。搜索引擎会读这些信息,但不要把列表的下一页只写在 rel="next" 里。页面上该有的分页链接,还是要有。
表单的 action
搜索、筛选、提交后跳转,经常靠 form action 完成。多数情况下,表单不会被当成普通的链接路径去走。希望结果页被抓到,更稳妥的做法是:一方面让这类结果页有一个可访问的固定地址,另一方面在页面上放一个指向它或者指向代表页的 a 链接。
meta refresh
这种跳转不同引擎的处理方式不一样,可能被当成重定向处理,也可能被忽略。站内跳转用 301 或 302 更明确;给用户看的“几秒后自动跳转”页面,最好同时给出一个可点的链接,别让用户和蜘蛛都等那个计时。
基本不要指望的几种写法
- CSS 里的地址:background-image、@import 引用的文件,一般不会作为页面链接被发现。
- 点击事件里的地址:onclick 里写跳转、事件绑定后再导航,都需要执行脚本才成立。
- data-* 属性里存的 URL:属性里放着地址,不等于页面上有一条链接。
- 纯文字形式的网址:页面上写着 example.com/page,读者要自己复制粘贴,蜘蛛也不会当成链接。
- 按钮元素本身:button 不带跳转能力,得靠脚本配合。
落到操作上的几条
- 导航、面包屑、列表、正文推荐位、页脚栏目,统一用 a 标签,href 写成可解析的地址。
- 图片入口、卡片入口:a 包住 img,不要只放一个 img。
- 分页的上一页、下一页,除了在 head 里标注关系,页面上也要能点。
- 筛选、搜索后的结果页,尽量给一个稳定地址,并在页面上留 a 入口。
- 发布后抽检:在浏览器里关掉 JS,只靠鼠标点,看能不能从入口走到目标页。
判断标准其实很简单:关掉 JS,只用鼠标点页面上的链接,能不能走到那个页面。走得通的路,蜘蛛大概率也走得通;只能靠脚本或表单才能到达的地方,把它当成额外通道,不要当成主路径。
链接写法不是为了多塞几个入口,而是为了让重要页面有一条稳定、可被反复引用的路径。a 标签之外的写法可以保留,但别让它们成为唯一入口——那是把抓取交给了自己控制不了的东西。