HTML 文檔之 Head 最佳實踐

語言

html 標籤中經過 lang 屬性進行明確的語言聲明,將會有助於翻譯,英文、簡體中文和繁體中文網頁所屬性值以下:css

<html lang="en"> <html lang="zh-Hans"> <html lang="zh-Hant">

編碼

請在 <head> 中第一行統一使用 utf-8 編碼聲明。html

<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 全面屏「劉海」的顯示。html5

<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">

DNS 預讀取

DNS 預讀取是一項使瀏覽器主動去執行域名解析的功能,其範圍包括當前文檔內的全部連接,這可以減小用戶點擊連接時的延遲。git

<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">

預加載

指示瀏覽器預先請求當前頁面所須要的關鍵性資源。github

<link rel="preload" href="/css/main.css" as="style"> <link rel="preload" href="/js/main.js" as="script">

預請求

指示瀏覽器預先請求用戶即將瀏覽頁面所須要的關鍵性資源。web

<link rel="prefetch" href="/img/css-sprite.png"> <link rel="prefetch" href="/fonts/icons.woff2">

渲染偏好

對於國內各類雙核瀏覽器,經過設置 renderer 頭要求它們使用 webkit 內核;對於 IE 瀏覽器,經過設置 IE=edge 要求它使用最新的版本;對於百度搜索強制轉碼的流氓作法,經過 no-transform 禁止其自動轉碼;指示瀏覽器對相似電話、郵箱或地址的內容不要自做聰明的瞎識別(移動端)。api

<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 文檔的一些元數據,包括:做者、描述、關鍵詞和生成工具;設置 robotsindex,follow 指示搜索引擎爬蟲該頁面須要進入索引,而且頁面內的全部連接都要繼續跟蹤;設置 referrerorigin-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 特性,咱們須要引入 html5shivresponse.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">
 
相關文章
相關標籤/搜索