页面越做越长,内容越藏越深:折叠面板、点击加载、下滑自动追加。对用户来说是体验,对搜索蜘蛛来说则是路径问题——它能不能拿到链接,能不能顺着链接继续往下走。这篇聊的是页面结构层面的可见性,不涉及收录承诺,只讲怎么让入口更容易被碰到。
蜘蛛看到的是 HTML,不是你的屏幕
我们打开页面看到的是一块块渲染好的区域,蜘蛛拿到的是服务器返回的 HTML,以及后续可能执行脚本得到的结果。所以判断某段内容会不会被发现,第一件事不是问“用户要滑几下才看到”,而是问:这个链接地址有没有写在 HTML 里。写在 HTML 里、只是被 CSS 藏起来的,通常不构成障碍;靠脚本在运行时才拼出来的,就要多留个心眼。
折叠面板与选项卡:多数情况下链接还在
用 display:none、visibility:hidden、height:0 隐藏的区块,链接往往仍在源码里,解析时一般能拿到地址。真正需要留意的是三点:
- 内容是服务端输出的,还是打开时才用接口拉回来的;
- 折叠区块里的链接是否有效,别指向 404 或一串跳转;
- 全站导航、面包屑这类关键路径不要只放折叠菜单里,放到默认展开的位置更稳妥。
懒加载:两种实现,结果差别很大
懒加载最容易踩坑的地方,在于它有两种常见写法:
- 地址写在属性里:把真实链接放在 data-src、data-href,加载时再搬到 src 或 href。地址在 HTML 中,风险较小。
- 地址由脚本生成:HTML 里只有一个空容器,链接靠运行时拼接或请求接口获得。这种情况下能否被发现,取决于渲染环节,容易延迟甚至拿不到。
如果是列表、卡片这类承载大量内链的模块,建议至少让第一屏或前若干条直接输出可点击的链接,后面的内容再通过加载补足。
无限滚动:翻页 URL 才是关键
无限滚动把分页变成了滚动事件,但它对抓取并不友好——蜘蛛不会真的往下滚。比较可行的做法是保留一套真实存在的分页地址,让滚动只是它的前端表现形式:
- 每一批内容对应一个可访问的 URL,例如 ?page=2 或 /list/2;
- 这些 URL 之间有可点击的上一页、下一页链接,能顺着走;
- 不要在滚动时才动态创建分页链接,静态输出更可靠;
- 数量大的列表,用 Sitemap 把分页或详情地址补充出来。
几个不太费力的稳妥做法
- 关键路径尽量用服务端渲染或预渲染输出,尤其是导航、分类、详情入口;
- 给懒加载内容留一个不依赖脚本的备用入口;
- 分页做成独立 URL,并保持参数形式稳定;
- 列表页改版时,检查链接是不是被包进了脚本模板;
- 把重要入口(首页、分类、Sitemap)控制在可维护的范围内,别随版本随意改动。
一个简单的自查方式:用抓取工具抓一次,或直接查看源代码,看链接是否还在 HTML 里。如果关掉脚本后就找不到入口,那就要考虑补一条静态路径。
别把几件事混在一起
最后提醒一点:能不能被发现、能不能被渲染、能不能被收录,是三件事。本文只解决第一件——让链接出现在蜘蛛读得到的位置。至于抓取之后怎么处理,需要结合日志和状态码单独观察。