HTML 文档之 Head 最佳实践--摘抄
HTML 文档之 Head 最佳实践
每一个标准的 HTML 文档都包含一个 <head>
头部分,除了声明文档类型,编码方式和文档标题,引入外部资源这些基本功能外, 头还能做很多非常有用的事情,这篇文章整理了作者认可的一些最佳实践,写在这里与各位分享。
语言
在 html
标签中通过 lang
属性进行明确的语言声明,将会有助于翻译,英文、简体中文和繁体中文网页所属性值如下:
<html lang="en">
<html lang="zh-Hans">
<html lang="zh-Hant">
编码
请在 <head>
中第一行统一使用 utf-8
编码声明。
<meta charset="utf-8">
Base 元素
尽量不使用 <base>
元素,绝对地址和 URL 对于开发者和用户来说都更好。
<!-- Bad -->
<base href="/blog/">
<link href="hello-world" rel="canonical">
<!-- Good -->
<link href="/blog/hello-world" rel="canonical">
Viewport
设置 viewport
的宽度为设备宽度,默认缩放比为 1(允许用户缩放),设置 viewport-fit=cover
以兼容 iPhone X 全面屏“刘海”的显示。
<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">
DNS 预读取
DNS 预读取是一项使浏览器主动去执行域名解析的功能,其范围包括当前文档内的所有链接,这能够减少用户点击链接时的延迟。
<meta http-equiv="x-dns-prefetch-control" content="on">
<link rel="dns-prefetch" href="//www.google-analytics.com">
<link rel="dns-prefetch" href="//fonts.googleapis.com">
预加载
指示浏览器预先请求当前页面所需要的关键性资源。
<link rel="preload" href="/css/main.css" as="style">
<link rel="preload" href="/js/main.js" as="script">
预请求
指示浏览器预先请求用户即将浏览页面所需要的关键性资源。
<link rel="prefetch" href="/img/css-sprite.png">
<link rel="prefetch" href="/fonts/icons.woff2">
渲染偏好
对于国内各种双核浏览器,通过设置 renderer
头要求它们使用 webkit 内核;对于 IE 浏览器,通过设置 IE=edge
要求它使用最新的版本;对于百度搜索强制转码的流氓做法,通过 no-transform
禁止其自动转码;指示浏览器对类似电话、邮箱或地址的内容不要自作聪明的瞎识别(移动端)。
<meta name="renderer" content="webkit"> <!-- 用在360中 -->
<meta name="force-rendering" content="webkit"> <!-- 用在其它 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <!-- 针对 IE 浏览器 -->
<meta http-equiv="Cache-Control" content="no-transform"> <!-- 针对百度搜索 -->
<meta name="format-detection" content="telephone=no,email=no,adress=no">
文档信息
HTML 文档的一些元数据,包括:作者、描述、关键词和生成工具;设置 robots
为 index,follow
指示搜索引擎爬虫该页面需要进入索引,并且页面内的所有链接都要继续跟踪;设置 referrer
为 origin-when-cross-origin
指示浏览器在进行跨域跳转时,其 referrer
值将统一为域名,而非具体的 URL 地址。
<meta name="author" content="米老朱">
<meta name="description" content="米老朱的个人博客">
<meta name="keywords" content="米老朱,极客,博客,WEB,开发,产品设计">
<meta name="generator" content="Hugo 0.32">
<meta name="robots" content="index,follow">
<meta name="referrer" content="origin-when-cross-origin">
Icons
虽说所有浏览器都还支持过时的 favicon.ico 格式,但在 HTML5 时代,我们应该使用更好的 PNG icon with sizes 方案。同时为了兼容老旧浏览器,我们可以将生成好的 favicon.ico 文件放在网站的根目录下面,通常浏览器会自动请求并加载它,并不需要额外通过 link 标签引入。
<meta name="theme-color" content="#db5945"> <!-- 主题颜色 -->
<meta name="application-name" content="米老朱的博客"> <!-- 应用名称 -->
<meta name="apple-mobile-web-app-capable" content="yes"> <!-- 隐藏状态栏 -->
<meta name="apple-mobile-web-app-status-bar-style" content="black"> <!-- 状态栏颜色 -->
<meta name="apple-mobile-web-app-title" content="米老朱的博客"> <!-- iOS 下的应用名称 -->
<meta name="msapplication-tooltip" content="米老朱的博客"> <!-- Hover 的提示信息 -->
<meta name="msapplication-TileColor" content="#db5945"> <!-- 磁贴背景颜色 -->
<meta name="msapplication-TileImage" content="/img/logo-144.png"> <!-- 磁贴图标 -->
<meta name="msapplication-config" content="/browserconfig.xml"> <!-- 磁贴配置文件 -->
<link rel="icon" type="image/png" href="/img/logo-16.png" sizes="16x16"> <!-- Browser Favicon -->
<link rel="icon" type="image/png" href="/img/logo-32.png" sizes="32x32"> <!-- Taskbar Shortcut -->
<link rel="icon" type="image/png" href="/img/logo-96.png" sizes="96x96"> <!-- Desktop Shortcut -->
<link rel="icon" type="image/png" href="/img/logo-128.png" sizes="128x128"> <!-- Chrome Web Store -->
<link rel="icon" type="image/png" href="/img/logo-196.png" sizes="196x196"> <!-- Chrome for Android Home Screen -->
<link rel="icon" type="image/png" href="/img/logo-228.png" sizes="228x228"> <!-- Opera Coast Icon -->
<link rel="apple-touch-icon" href="/img/logo-120.png"> <!-- iPhone -->
<link rel="apple-touch-icon" href="/img/logo-152.png" sizes="152x152"> <!-- iPad -->
<link rel="apple-touch-icon" href="/img/logo-180.png" sizes="180x180"> <!-- iPhone Plus -->
<link rel="apple-touch-icon" href="/img/logo-167.png" sizes="167x167"> <!-- iPad Pro -->
<link rel="mask-icon" href="/img/logo.svg" color="green"> <!-- Safari Pinned Tab Icon -->
微软为了让 Metro UI 更好看,引入了 browserconfig.xml
文件,主要用于定制网站固定磁铁的图标和背景颜色,其格式如下所示:
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square70x70logo src="/img/logo-70.png"/>
<square150x150logo src="/img/logo-150.png"/>
<wide310x150logo src="/img/logo-310x150.png"/>
<square310x310logo src="/img/logo-310.png"/>
<TileImage src="/img/logo-144.png"/>
<TileColor>#db5945</TileColor>
</tile>
</msapplication>
</browserconfig>
favicon.ico 实际上是一个图片容器,里面至少应该包含 16x16,32x32,48x48 三个尺寸的 png 图片,我们可以使用 ImageMagick 工具在本地直接生成(生成之前需要对 png 图片进行压缩以减小尺寸)。
$ convert favicon-16.png favicon-32.png favicon-64.png favicon.ico
注意:apple-mobile-web-app-status-bar-style 值默认状态栏为白色,可设置为 black(黑色) 或者 black-translucent(灰色半透明);mask-icon 引入的 svg 文件必须只有一个图层,并且 viewBox
属性应该为 “0 0 16 16”。
Twitter 卡片用于将网站内容以更加优雅漂亮的方式分享到 twitter.com 网站,从形式上说,分为:summary, summary_large_image, app, player 四种形式,通常我们的站点只需要 summary 这种形式。
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="@melaozhu">
<meta name="twitter:title" content="此处为分享标题">
<meta name="twitter:description" content="此处为分享描述">
<meta name="twitter:image" content="此处为分享配图">
配置上线后,你可以通过这个 Card validator 工具检查是否正确显示。
Facebook Open Graph
Open Graph 是一套开放的网页标注协议,通过 meta 标签标注网页的类型,主要由 Facebook 推动,已经成为社交分享领域的事实标准。如果你希望明确告诉社交网络或搜索引擎你的网页类型,你应该添加这些 meta 标签。
<meta property="og:type" content="article">
<meta property="og:title" content="此处为分享标题">
<meta property="og:description" content="此处为分享描述">
<meta property="og:image" content="此处为分享配图">
<meta property="og:url" content="此处为分享的链接地址">
固定链接
对于一份文档存在多个 URL 的情况,通过 rel="canonical"
指定唯一的固定链接。
<link rel="canonical" href="https://laozhu.me/">
对于支持 RSS 订阅的页面,可针对 RSS 阅读器提供可订阅的源文件。
<link rel="alternative" href="/index.xml" title="米老朱的博客" type="application/atom+xml">
Polyfill
可以专门为老旧的 IE 浏览器引入 Polyfill 方案,举个例子,为了让 IE6-IE8 浏览器能够使用 HTML5 标签和 Media Query 特性,我们需要引入 html5shiv 和 response.js 这两个库。
<!--[if lt IE 9]>
<script src="//cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="//cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
其他的 Polyfill 方案写法类似。
打印样式表
对于可打印的页面(如文章页面),可提供针对打印机的样式表,使得网站用户可以将文章打印下来阅读。
<link rel="stylesheet" href="/css/print.css" media="print">
交替样式表
定义交替样式表的时候,指定其 title
属性,以方便用户在浏览器中根据名称选择替代样式,交替样式表多用于多主题切换的站点。
<link href="default.css" rel="stylesheet">
<link href="high-contrast.css" rel="alternate stylesheet" title="High contrast">
参考资料
- HTML Best Practices
- Favicon Cheatsheet
- DNS 预读取
- Prefetching, preloading, prebrowsing
- Favicons, Touch Icons, Tile Icons, etc. Which Do You Need?
- Here’s Everything You Need to Know About Favicons in 2017
- Configuring Web Applications
- Creating Pinned Tab Icons
- “The Notch” and CSS
- Alternative style sheets
HTML 文档之 Head 最佳实践--摘抄的更多相关文章
- HTML 文档之 Head 最佳实践
语言 在 html 标签中通过 lang 属性进行明确的语言声明,将会有助于翻译,英文.简体中文和繁体中文网页所属性值如下: <html lang="en"> < ...
- OPEN(SAP) UI5 学习入门系列之二: 最佳实践练习(上)
这篇博文难产了很久,原来是打算一周更新一篇的,上周原计划写MVC,但是写了一半,发现带入了太多的细节,不太符合这个入门系列的主题. 当我们学习一个新的技能的时候,如果一开始就面对大量的细节,很容易陷入 ...
- Oh my God, Swagger API文档竟然可以这样写?
最好的总会在不经意间出现. 作为后端程序员,免不了与前端同事对接API, 一个书写良好的API设计文档可有效提高与前端对接的效率. 为避免联调时来回撕逼,今天我们聊一聊正确使用Swaager的姿势. ...
- Windows Azure 安全最佳实践 - 第 3 部分:确定安全框架
构建云应用程序时,安全始终是计划和执行Windows Azure的首要核心因素.第 1 部分提出安全是一项共同责任,Windows Azure为您的应用程序提供超出内部部署应用程序需求的强大安全功能. ...
- MongoDB最佳实践中文手册
背景:查阅了一下MongoDB的相关文档,发现中文文档还是比较少的,工作中需要用到MongoDB,而这本<MongoDB最佳实践>是很好的选择,所以就把这本手册翻译了一下,其中生涩的专业用 ...
- 推荐个开源在线文档,助道友领悟 Django 之“道”
本文面向有手(需要一点点 Python Django 基础)的小伙伴,急需文档管理者食用最佳. 作者:HelloGitHub-吱吱(首发于 HelloGitHub 公众号) 嗷嗷待哺的小白:" ...
- ELK学习总结(2-4)bulk 批量操作-实现多个文档的创建、索引、更新和删除
bulk 批量操作-实现多个文档的创建.索引.更新和删除 ----------------------------------------------------------------------- ...
- 完美CSS文档的8个最佳实践
在css的世界,文档没有被得到充分的利用.由于文档对终端用户不可见,因此它的价值常常被忽视.另外,如果你第一次为css编写文档,可能很难确定哪些内容值得记录,以及如何能够高效完成编写. 然而,为C ...
- 测试驱动开发实践4————testSave之新增文档分类
[内容指引] 1.确定"新增文档分类"的流程及所需的参数 2.根据业务规则设计测试用例 3.为测试用例赋值并驱动开发 一.确定"新增文档分类"的流程及所需的参数 ...
随机推荐
- activeandroid复制本地数据库问题总结
activeandroid no such table 解决activeandroid no such table failed to read row 0 column 1 from a curso ...
- mac 上使用移动硬盘
1. 打开终端,查看赢盘的Volume Name diskutil list 2. 更新fstab文件,此步骤需要输入密码 sudo nano /etc/fstab 3. 在fstab文件中写入一下内 ...
- 数据库web项目对数据库的操作
1.0.JSTL与jsp实现对数据库的操作 MySql 数据库: create database if not exists CommodityDB; use CommodityDB; drop ta ...
- 风格附加css
#header #blogTitle { background: url("http://images.cnblogs.com/cnblogs_com/aiwuxia/1249780/o_1 ...
- EAGLView介绍
http://book.51cto.com/art/201108/285446.htm
- 开发工具IDEA环境安装配置
开发工具IDEA环境安装配置 该工具和eclipse类似,但是使用感受确实比eclipse好,越来越多人开始使用IDEA了. 下载地址如下 : https://www.jetbrains.com/id ...
- 【贪心】bzoj1572: [Usaco2009 Open]工作安排Job
先是没怎么理解这个贪心……然后贪心又被细节弄挂…… Description Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间. ...
- 如何用纯 CSS 创作一支诱人的冰棍
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/vrxzMw 可交互视频教 ...
- vue源码构建代码分析
这是xue源码学习记录,如有错误请指出,谢谢!相互学习相互进步. vue源码目录为 vue ├── src #vue源码 ├── flow #flow定义的数据类型库(vue通过flow来检测数据类型 ...
- perl学习之:read
perl read()函数例子,read()函数实例代码 - 读取,或试图读取,长度LENGTH 与文件句柄FILEHANDLE 相关联的文件到缓冲区BUFFER中的字节数. 语法 read FILE ...