做蜘蛛池入口頁时,一個常见的纠结是:目标URL的連結要不要让真實訪客看见。有人直接上 CSS,把連結容器设成 display:none、visibility:hidden,或者用 font-size:0、text-indent:-9999px、绝對定位挪到屏幕外。這样頁面看起来干净,但問题随之而来——搜尋蜘蛛到底還認不認這些連結?
先说结论
多數搜尋蜘蛛在抓取 HTML 阶段是“看源碼”的,CSS 隐藏不會让連結從源碼里消失,所以它通常仍能解析出 href,進而發現目标URL。但這只解决了“發現”,没解决“信任”和“抓取配額”的問题。隐藏連結在搜尋引擎的作弊特征库里是長期存在的項目,一旦入口頁整体被判定為刻意隐藏,後續来訪频次、目标URL被跟進的机會都會打折扣。
搜尋蜘蛛分两個阶段看連結
解析 HTML 源碼阶段
爬虫拿到响應後先做解析,提取 a 标簽的 href。這個阶段基本不考虑 CSS 與布局,連結藏在哪一层容器里都一样。所以單從“能不能發現”的角度看,隐藏連結是有效的。
渲染與质量判断阶段
部分引擎會用無头浏览器渲染頁面,检查元素是否可见、是否在首屏、是否被其他元素覆盖。渲染後如果發現連結全部不可见,頁面就可能被标记為可疑。這一步不一定马上体現在抓取上,但會進入质量评估的資料里,影响後續排期。
几種隐藏寫法與各自的麻烦
- display:none、visibility:hidden:最典型的隐藏手法,風險最高。
- font-size:0 或文字颜色與背景同色:同属隐藏文本、隐藏連結的范畴。
- 绝對定位到可视区域外,例如 left:-9999px:同样會被识別出来。
- 放在折叠层里、必须交互才展開:相對温和,但仍属于“非預設可见”。
這些問题不只是“可能不抓”,而是入口頁本身可能被降權。入口頁一旦被归入低质量,蜘蛛来訪频次下降,池子里的目标URL自然更难被發現,前面的投入也就打了水漂。
什么情况下确實需要隐藏
並不是所有隐藏都不可接受,關键看動机和程度:
- 頁面本身是给内部或特定渠道用的工具頁,不想被普通訪客看到。
- 連結属于功能性導航,需要交互(展開菜單、点击“加载更多”)後才出現。
- 同一頁面上有大量重复連結,為避免干扰訪客而收起一部分。
如果属于這几種,更稳妥的做法是:让核心目标URL保持預設可见,只把次要或重复的部分收起,而不是把整批連結一次性藏掉。
比隐藏更實用的做法
- 正常可见的列表:入口頁放一段简短說明,下面用列表列出目标URL,連結預設可见,蜘蛛和訪客看到的是同一份内容。
- 控制連結數量:一個入口頁別堆太多連結,几十條以内更容易被完整跟進。
- 把“不想让訪客進来”和“不想让蜘蛛看到”分開處理:前者用訪問控制,後者才需要谈抓取策略,不要用 CSS 糊弄訪客。
- 避免给蜘蛛和訪客返回不同内容:短期看似有效,長期風險比隐藏連結更大。
怎么判断是否越界
一個简單的自检:把頁面截图给不熟悉技術的同事看,如果對方完全看不出這里有連結,那在搜尋引擎眼里也基本属于隐藏内容。入口頁的定位是给搜尋蜘蛛提供一條走得通的路径,不是做视觉魔術。
實操調整顺序
如果已经在用 CSS 隐藏連結,可以按下面的顺序調整:先把最重要的目标URL改成可见連結,观察服務器日誌里的蜘蛛来訪情况;再逐步把其余連結也放出来,同时减少單頁連結總量;最後回查入口頁本身能不能被正常抓取、有没有被 robots.txt 挡住、响應是否稳定。隐藏連結只是“發現”环节里的一個小變量,真正决定目标URL能不能被抓的,還是入口頁的可訪問性、稳定性和整体质量。