HTML rel属性值释义大全

byzhangxinxu from https://www.zhangxinxu.com/wordpress/?p=8488

本文欢迎分享与聚合,全文转载就不必了,尊重版权,圈子就这么大,若急用可以联系授权。

一、HTML rel属性值索引

HTML中有一个名为 rel 的属性,是relationship这个单词的缩写,指明两个文档之间的关系,专门用来链接相关元素上,如

元素上,因此 rel 的属性值也是“链接类型”的代称。

rel 支持非常多的属性值,包含的知识非常多,且有些属性值非常重要,完整细读至少需要30分钟时间。

二、33个rel属性值完全展示

1. rel=”alternate”

允许使用的链接元素 不允许使用的链接元素

单词alternate有交替、替换的意思。顾名思意就是链接有替换内容。主要有下面3大应用场景,有些场景还非常实用。

  1. 用在 元素中,和 stylesheet 链接类型一起使用,配合 title

    属性(必须),可以定义替换CSS,可以以一种体验更好的方式实现类似换肤这种功能。

    兼容性非常好,IE,Chrome和Firefox均支持这种更原生的换肤效果实现。

    具体原理与实现可以参见这篇热门文章:“ link rel=alternate网站换肤功能最佳实现 ”。

  2. 如果网站包含RSS订阅。可以使用该值进行指明,需要设置type属性值为 application/rss+xml 或者 application/atom+xml (ATOM是一种订阅网志的格式。一种Web feed,和RSS相类似)。例如:
    
    

    或者使用在指向RSS订阅地址的 元素上:

    RSS订阅
  3. 还可以用来定义用来替换的页面。场景较多,例如:
    • media响应处理,小于640像素时候,告诉用户或者设备(或搜索引擎),还有移动站页面,例如:
      
      
    • 多语言时候告诉用户或者设备(或搜索引擎)还有其他语言的网站,需要 hreflang

      属性同时设置,例如西班牙语:

      
      

      或者直接链接也可以:

      西班牙语
    • 指向另外的格式,例如PDF文件,需要 type 属性同时设置(值为对应文件的MIME type值)。
    • 或者上面混合使用。

2. rel=”archives”

允许使用的链接元素 不允许使用的链接元素

archives语义是归档。此 rel 属性值可以用来定义指向归档语义的超链接。例如,我的博客的每月索引页的 链接就可以使用这个值。

例如:

2019年五月

注意后面有 s ,直接 rel="archive" 是不正确的,不要使用。

3. rel=”author”

允许使用的链接元素 不允许使用的链接元素

链接指向作者介绍页。

例如:

链接地址支持直接 href 属性值以 mailto: 开头,可以呼起邮件客户端发送邮件,但是在网页中其实不推荐这么做,因为容易被爬虫把邮箱爬过去。推荐作为是链接地址执行作者信息介绍页面,然后通过 rel="author" 增强这个链接的语义。

4. rel=”bookmark”

允许使用的链接元素 不允许使用的链接元素

bookmark的语义是书签。

通常用在指向文章内容的永久链接上,例如本站的列表页每一个文章链接元素就有设置 rel=bookmark

5. rel=”canonical”

允许使用的链接元素 不允许使用的链接元素

canonical是规范的意思,只能作用在 元素上,此值的作用与搜索引擎有关,可以为类似网页或重复网页指定规范网页。

拿Google搜索举例,如果您的某一个网页可通过多个网址访问,或者您的不同网页包含类似内容(例如,某个网页既有移动版,又有桌面版),那么 Google 会将这些网页视为同一个网页的重复版本。Google 会选择一个网址作为规范版本并抓取该网址,而将所有其他网址视为重复网址并降低对这些网址的抓取频率。

如果您未明确告知 Google 哪个网址是规范网址,Google 就会替您做出选择,或会将这两个版本视为同等重要,这可能会导致出现一些不当的行为。

那如何让Google知道哪个网址是最规范最优先的呢?其中一个方法就是rel=canonical 标记。

例如wordpress文章链接地址有多种URL表示,比如我希望用户通过 https://www.zhangxinxu.com/wordpress/2019/05/html-a-rel/(而非 https://www.zhangxinxu.com/wordpress/?p=8488)访问这篇文章。则可以在 中新增如下所示的代码:


如果规范网页有移动版,还可以为其添加 rel="alternate" 链接,并使该链接指向此网页的移动版(本站没有专门移动页面,下面地址仅示意):


rel=canonical 标记方法的优点是可以映射无限多个重复网页,不足是在大型网站或网址经常改变的网站上维护映射会比较复杂,且仅适用于 HTML 网页,不适用于 PDF 之类的文件(在这种情况下,您可以使用 rel=canonical HTTP 标头)。

6. rel=”dns-prefetch”

允许使用的链接元素 不允许使用的链接元素

只能作用在 元素上,作用是DNS预读取。允许浏览器在用户单击链接之前进行DNS查找和协议握手,可以提高页面资源加载速度。

例如:


此时域名“www.zhangxinxu.com”将被预先解析。

此时如果页面中有链接地址的域名也是“www.zhangxinxu.com”,那么当用户点击这个链接的时候,新打开的页面就少了DNS向上查找这一步,因为之前浏览器已经DNS预读取了,页面呈现速度就会快一些,虽然快的并不是很多,但能快一点是快一点。

7. rel=”external”

允许使用的链接元素 不允许使用的链接元素

external是外部的意思。当链接指向的是外部资源或外部链接的时候,可以使用该属性。主要作用是告诉搜索引擎,这是一个外部链接。常常和 nofollow 值一起使用,例如:

Foobar

需要注意的是 rel=external 和链接在新窗口打开没有任何关系。

8. rel=”first”

允许使用的链接元素 不允许使用的链接元素

表示指向一个序列页面资源的第一个资源。其它类似的rel链接资源类型有 lastprevnext

9. rel=”help”

允许使用的链接元素 不允许使用的链接元素

、、

例如我之前制作的一个SVG在线压缩工具,选中任意SVG,有下图所示的一个文案和图标:

问号图标是一个超链接,用来对上下文进行帮助说明,也就是解释CSS转义是什么,此时就非常使用使用 rel="help" ,代码如下:

CSS转义
    

10. rel=”icon”

允许使用的链接元素 不允许使用的链接元素

这个比较常用,可以指定网站小图标。

指定网页favicon,我们常常会在 icon 类型前面加上 shortcut link类型,例如:


现在已经9021年了, shortcut 这种link类型早已不符合规范,浏览器直接无视,因此,没有必要再使用了,我们直接使用 icon 类型即可。

例如:


我们也可以使用PNG格式的图像作为favicon,如果是多个icon,我们还可以使用 type 或者 sizes 等属性指定不同的类型和尺寸。例如:


...

favicon如果深入,涉及到的知识点会很多,这里不展开,之后会专门写文章介绍。

11. rel=”import”

允许使用的链接元素 不允许使用的链接元素

就是HTML Imports,Web Components开发重要组成部分之一,例如:


HTML Imports居然没有专门写文章介绍,失策,这个回头补上。

12. rel=”index”

允许使用的链接元素 不允许使用的链接元素

表示超链接指向的页面资源是某个具有层级结构的一部分。

如果还存在一个或多个 up 链接类型,则 up 链接类型的数目表示层次结构中当前页面的深度。

这个属性在HTML5规范出来之后就已经被舍弃了,大家了解即可。

13. rel=”last”

允许使用的链接元素 不允许使用的链接元素

表示指向序列页面的最后一个页面。其它类似的rel链接资源类型有 firstprevnext

14. rel=”license”

允许使用的链接元素 不允许使用的链接元素

、、

license语义是许可证,你也可以理解为版权说明。例如一个指向MIT license说明或者BSD license说明的超链接,就可以使用此 rel 属性值。

BSD license

copyright 这个值虽然同义,也能识别,但是是不正确的请不要使用。

15. rel=”manifest”

允许使用的链接元素 不允许使用的链接元素

指定清单文件,用做Web应用程序清单部署,例如:


.webmanifest 是约定俗成扩展名,返回文件内容类型需要是: Content-Type: application/manifest+json ,也支持 .json 扩展名的清单文件。

manifest可以让webapp变得更加native,离线开发时候也很有用。

16. rel=”modulepreload”

允许使用的链接元素 不允许使用的链接元素

modulepreload 可以用来预加载原生模块脚本,例如:

  

[...]

为何不使用 加载模块JS呢?因为 没有 crossorigin 属性,和普通的 元素不一样。更多关于 modulepreload 知识可以参见 这篇文章

17. rel=”next”

允许使用的链接元素 不允许使用的链接元素

、、

表示指向序列页面的下一个页面。其它类似的rel链接资源类型有 firstlastprev

18. rel=”nofollow”

允许使用的链接元素 不允许使用的链接元素

rel=nofollow 可让网站站长告诉搜索引擎“不要跟踪此网页上的链接”或“不要跟踪此特定链接”。

例如登录页面无需抓取,可以:

登录

但是,不同搜索引擎策略不一样,至少Google是不抓取的。

19. rel=”noopener”

允许使用的链接元素 不允许使用的链接元素

这是一个很重要的且常用的 rel 属性值,与安全相关。

如果我们的链接元素没有设置 noopener ,则在新窗口打开这个链接的时候,则这个新窗口页面可以通过 window.opener 获取来源页面的窗体对象,于是可以改变原页面URL地址之类的事情。

例如这里有个名为“ About rel=noopener ”的测试页面,此时URL地址是“https://mathiasbynens.be/demo/opener”。

点击测试页面上前两个测试链接(直接点击,不要按住Ctrl键再点击),例如点击下面这个跨域地址:

此时会进入另外一个不同域名的测试页面,可以看到域名和文案,我翻译下就是:

此时,我们在回到之前页面,会发现URL后面被悄悄地增加了一个锚点地址,同时页面上出现了一些有趣的文字:

这里仅仅是一个简单的恶作剧,实际上如果是真实的页面场景,不怀好意的人可以把你这个原页面跳转到一个高仿的诈骗页面,是不是很危险的一件事情?

因此,如果您的网站上有外部的链接地址,一定要记得加上 noopener

20. rel=”noreferrer”

允许使用的链接元素 不允许使用的链接元素

当导航到其他页面的时候,可以阻止浏览器向跳转页面发送页面地址以及其他值。

看描述以为作用和在页面头部设置referer meta信息一样:


结果在Firefox以及Chrome浏览器下测试了下,不知道是不是我打开方式的的问题,没有效果。例如新浪微博图床图片前端时间不允许外站访问了,但是设置referrer为 no-referrer 是可以呈现的,但是使用 rel="noreferrer" 链接测试的时候依然无法显示。

于是我就对 rel="noreferrer" 的实用性表示严重的怀疑,只能求达人指点迷津了。

21. rel=”opener”

允许使用的链接元素 不允许使用的链接元素

这是个还处于实验阶段的新特性。 openernoopener 的语义完全是相反的,表示超链接出去的页面有 window.opener ,为什么会有这个属性值呢?

因为2018年10月10日“萌节”这天,cdume在related HTML规范讨论中发表了如下提议:

Windows opened via  should not have an opener by default

也就是设置了 target=_blank 元素默认就没有 opener ,这样更安全。收到很多点赞,规范也会跟进。于是就有问题了,如果开发者希望页面有opener该怎么处理呢?

于是就有了 rel="opener" ,如果一个链接元素设置了 target=_blank ,同时希望新开页面有 window.opener 对象,则可以给链接元素添加 rel="opener"

22. rel=”pingback”

允许使用的链接元素 不允许使用的链接元素

pingback估计了解的开发人员不多,如果是wordpress资深用户,应该会比较熟悉。在运管WordPress博客的时候,后台评论经常看到来自某一篇文章的pingback,表示你这篇文章被引用了。pingback可以让Web作者追踪什么人链接至他的文章。

pingback有专门的调用与协议规范,有兴趣可以参见 pingback 1.0规范

例如我的博客头部HTML中就有相关使用:


23. rel=”preconnect”

允许使用的链接元素 不允许使用的链接元素

实验阶段属性值。由于是渐进增强特性,因此,可以放心使用。

作用是告知浏览器提前连接链接地址对应站点,不过只是连接,并不会公开任何私人信息或者下载任何内容。好处是打开链接内容的时候可以更快的获取(节约了 DNS 查询、重定向以及指向处理用户请求的最终服务器的若干往返)。

例如:


上面这段HTML作用是浏览器知道我们打算连接到 www.zhangxinxu.com 并从其中获取内容,然后浏览器会提前做好连接。

但是 preconnect 并不是没有成本的,千万不能滥用。 会占用宝贵的 CPU 时间,如果用户没有在 10 秒内使用该连接,资源浪费的情况就会变得更严重,因为当浏览器关闭连接时,所有已完成的连接都将遭到浪费。

因此,尽可能使用 ,一些特殊场景下使用

24. rel=”prefetch”

允许使用的链接元素 不允许使用的链接元素

之后可能会实现)

prefetch 表示预获取,通常是一些静态资源。语法如下:


prefetch 最适合抢占用户下一步可能进行的操作并为其做好准备,例如搜索结果列表中首个产品的详情页面或搜索分页内容的下一页。


prefetch兼容性还不错,除了目前Safari不支持以为,其他浏览器都挺不错的,如下图所示:

25. rel=”preload”

允许使用的链接元素 不允许使用的链接元素

preload 表示预加载。告诉浏览器这些资源你先帮我加载,之后我要使用。例如:


请注意,是强制浏览器执行的指令,不只是可选提示,与上面的 preconnectprefetch 是不一样的。

因此,使用 preload 时一定要保证内容会被使用,如果提取的资源3秒内没有被当前页面使用,Chrome开发者工具的控制台会触发警告!

preload 的兼容性如下截图:

虽然Safari浏览器支持了,但是Firefox却还需要手动开启,不过看样子Firefox很快就会绿色支持了。总之,兼容性还是可以的,可以用起来,优化网页资源的开发与调用。

26. rel=”prerender”

允许使用的链接元素 不允许使用的链接元素

prerender 表示预渲染。告知浏览器在背后先默默渲染页面,当用户之后导航到这个页面时候会大大加快加载速度。

语法如下:


prefetch 区别在于, prefetch 获取页面并不会加载页面中的css和js资源,更多是页面本身,但是 prerender 已经在背后默默做起渲染的事情,预处理要更进一步。

目前兼容性不算很好,也就Chrome PC端支持不错,且也是刚支持不久。

27. rel=”prev”

允许使用的链接元素 不允许使用的链接元素

、、

表示指向序列页面的上一个页面。其它类似的 rel 链接资源类型有 firstlastnext

28. rel=”search”

允许使用的链接元素 不允许使用的链接元素

、、

表示链接地址是当前网站或资源对于的搜索文档接口页面。

以及其他一些类似插件的作用。例如我们设置 type 属性值为 application/opensearchdescription+xml ,则对应的资源( OpenSearch描述文件 )可以作为Firefox或者Internet Explorer的搜索插件。

例如在 标签里加上:


provider.xml的内容为:


 UTF-8
 关键词搜索
 关键词搜索
 /favicon.ico
 

我弄个了简单的静态页面测试了下,嘿哟喂,真的可以(Firefox浏览器下截图)。

这样,网站所有页面,就算没有搜索框也可以搜索了,不过Chrome浏览器地址栏没搜索框,Firefox和IE浏览器支持,这投入产出比有些低,不过可以作为有趣的案例和同事分享分享。

29. rel=”shortlink”

允许使用的链接元素 不允许使用的链接元素
不详

网站当前页面对应的短链接,这样分享链接的时候要更容易(微博字数限制,微信或QQ中地址呈现等)。

例如,我的这篇博客文章头部就有 shortlink 的应用,HTML如下:


30. rel=”sidebar”

允许使用的链接元素 不允许使用的链接元素

sidebar 曾经是HTML规范的一部分,但是最近已经从规范中删除掉了,Firefox 63之后的版本已经不支持。这里不展开,其语义就是指向可以帮助浏览二级浏览上下文的资源,例如侧边栏。

31. rel=”stylesheet”

允许使用的链接元素 不允许使用的链接元素

指向样式表资源,例如:


这个几乎每一个网页都会使用,大家应该都很熟,就不多说了。

32. rel=”tag”

允许使用的链接元素 不允许使用的链接元素

表示指向表述当前文档标签的链接。例如wordpress文章中的标签链接都有设置该属性值,例如:

因此SEO会更加精准,质量更高。

33. rel=”up”

允许使用的链接元素 不允许使用的链接元素

表示当前页面是层次结构的一部分,并且超链接指向该结构的更高级别资源。

up 链接类型的数量表示当前页面和链接资源之间的深度差。

三、结束语

嘛呀,不简单,1万三千多字,这样的长篇通常没什么人会耐心看完的,历史经验告诉我,HTML范畴,又是小众属性,内容又长,虽然是稀缺技术资源内容,但注定要压箱底落灰。

但这样的内容恰恰是那些真正热爱技术的人需要的,抛开表面与功利,做真正有价值,且价值深远的事情。

本文很多rel属性值都是只做了简单的介绍,偏广度,以后有机会,会从深度角度介绍一些属性值。

参考文档:

以上,感谢阅读到这里!

本文为原创文章,欢迎分享,勿全文转载,如果内容你实在喜欢,可以加入收藏夹,永不过期,而且还会及时更新知识点以及修正错误,阅读体验也更好。

本文地址: https://www.zhangxinxu.com/wordpress/?p=8488

(本篇完)