标签的rel属性不支持search值,浏览器完全忽略;opensearch仅识别且需配合正确的type、href及可访问的xml文件。

a 标签不支持 rel="search"
直接说结论:<a></a> 标签的 rel 属性不能用于 OpenSearch 集成——浏览器完全忽略它。OpenSearch 只认 <link> 标签,且必须满足特定 rel、type 和 href 组合。
常见错误是把 <a rel="search" href="/search?q=%7BsearchTerms%7D"></a> 当作快捷搜索入口,结果毫无反应。这不是 bug,是标准没定义这个用法。OpenSearch 协议从 2005 年起就只规定了 <link rel="search"> 这一种声明方式。
-
<a></a>的rel值如nofollow、noopener是为链接语义服务的,和浏览器地址栏搜索功能无关 - 哪怕你把
{searchTerms}占位符放进<a></a>的href,浏览器也不会解析、不会订阅、不会出现在地址栏下拉中 - 部分旧文档或博客误写示例,容易误导;实际测试(Chrome 126+、Firefox 128+)均验证无效
link rel="search" 必须配对 OpenSearch XML 文件
只有 <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml"> 才有效,但光写这行 HTML 远不够——/opensearch.xml 必须真实存在、可访问、格式正确、响应头匹配。
最容易卡住的三个点:
-
/opensearch.xml必须能通过 HTTPS 直接 GET 到(HTTP 站点 Chrome 直接跳过) - 服务器必须返回
Content-Type: application/opensearchdescription+xml(Nginx/Apache 需手动配置 MIME 类型) -
<url></url>元素里的template属性必须含且仅含一个{searchTerms}占位符,不能是{q}、%s或 URL 编码后的%7BsearchTerms%7D
示例正确片段:<url type="text/html" template="https://example.com/search?q={searchTerms}"></url>
用户必须主动“订阅”,浏览器才启用快捷搜索
加了 <link>、XML 也对,不代表地址栏立刻出现你的搜索项。这是设计使然,不是延迟或缓存问题。
触发条件很明确:
- 用户在地址栏输入关键词后回车(不是先访问你网站)
- 浏览器识别到该域名已声明 OpenSearch,弹出建议(Chrome 显示“搜索 example.com”小提示,Firefox 显示“添加 ‘example.com 搜索’”)
- 用户点击“添加”或“允许”——这一步不可跳过,隐身窗口里永远不生效
订阅后,下次再输域名按 Tab 键,就能直接进入站内搜索;图标显示取决于用户设置的默认搜索引擎,HTML 无法控制。
Chrome 对 searchDescription meta 已基本弃用
网上不少教程还提 <meta name="searchDescription">,但实测(2026 年 6 月最新稳定版 Chrome)该标签已无实际作用:即使 HTTPS + XML 存在 + meta 在 ,也不影响地址栏下拉行为。
真正起效的只有 <link rel="search"> 这一条路径。其他组合如 application-name + searchDescription、或者放在 里的 <link>,全部无效。
别浪费时间调 searchDescription 的 content 值或尝试多放几个 meta——重点盯死三件事:XML 路径可访问、MIME 正确、用户完成那一次点击订阅。











