很多站点的導航、卡片和列表标题在浏览器里点得動,但查看網頁源代碼时却找不到對應的連結地址。蜘蛛抓取頁面时,主要依據 HTML 中可解析的 a 标簽和 href 属性。如果入口只寫在 click 事件里,蜘蛛在解析阶段看不到它,這個地址就等于没有出現在頁面上。對用戶来说也有影响:無法右键新窗口打開、不能複製連結、不方便收藏,讀屏软件也难以识別。
哪些寫法容易出問题
- 用 div、span、li 加 onclick 或事件监听跳轉,源碼里没有 href。
- 按钮元素配合 location.href,看起来像連結按钮,實际不是連結。
- 下拉菜單、折叠面板的内容由脚本在交互後才插入 DOM,初始 HTML 中没有地址。
- 卡片整块用绝對定位遮罩点击,“查看更多”的标题却没有連結。
- 分頁和“加载更多”只触發請求,不留下可訪問的下一頁地址。
- 連結寫成 javascript:void(0) 或 href 為空,再靠脚本跳轉。
自查怎么做
- 在浏览器里查看頁面源代碼,或抓取一次 HTML,搜尋 href,核對重要入口是否都在。
- 禁用 JavaScript 後再打開頁面,看導航、列表、分頁還能不能正常跳轉。
- 用抓取工具對比“原始 HTML”和“渲染後 HTML”,如果大量連結只出現在渲染後,就要提高警惕。
- 重点检查:主導航、栏目入口、面包屑、列表頁标题、分頁、相關阅讀、頁脚重点連結。
- 抽查移動端和桌面端,確認两套模板都没有把連結換成点击事件。
修复的基本思路
把連結還原成連結:使用 a 标簽,href 指向真實可訪問的地址。需要額外交互时,在脚本里做增强,但要保留預設跳轉能力。例如阻止預設行為前,先確認 href 是有效地址;即使脚本失效,用戶仍然可以跳轉。
列表卡片整块可点,可以让标题包在 a 标簽里,再用样式把可点区域扩展到卡片范围,而不是反過来用 div 模拟連結。
下拉菜單和标簽頁的内容,尽量在初始 HTML 中就有對應連結,脚本只负责顯示與隐藏,不要等到点击後才向服務器請求連結结构。
無限滚動和“加载更多”建议保留一個可用的分頁地址,让蜘蛛和無法使用滚動的用戶都有入口繼續往下走。
上线前的小清單
- 重要入口在禁用 JavaScript 的情况下能否跳轉?
- 原始 HTML 里是否能搜到目标地址?
- 是否存在 href 為空或 javascript:void(0) 的連結?
- 分頁與“加载更多”是否有静態地址?
- 移動端模板是否同样保留連結?
能不能点,是用戶体驗問题;href 在不在,是能否被發現的問题。两者都要顾,但不要用前者替代後者。
把入口連結放回 a 标簽,通常不需要大改版,只需要在模板层面調整一次,之後生成的頁面都會受益。