前端二向箔03-HTML元資料和連結
03 HTML元資料和連結
html元資料即在head
標籤中的部分, 主要是描述了網頁的一些重要的資訊和媒體連結. 大多情況下是提供給瀏覽器爬蟲和機器閱讀的. 連結作為網頁的互聯的基石, 在head中連結有link
和script
兩種形式.
本文歸納常見的元資料和連結的重要知識.
元資料
-
head
head本身沒有意義, 只提供儲存容器, 是Document的元資料集合. 不會在頁面上顯示, 且只有一個title和base.
-
title
網頁html文件標題, 而非網頁內容標題( h1~h6), 主要在搜尋中體現重要性, 對於整個文件的概括性. 這個標題在其他上下文中也會被使用,例如在使用者的歷史、書籤,或搜尋結果中
-
base
給網頁上的URL提供相對地址的基礎, 相當於根目錄字首, 只能有一個base. 它會改變全域性的連結, 並不提倡使用.
<base href="https://www.example.com/news/index.html"> ... <p>Visit the <a href="archives.html">archives</a>.</p>
上面例子中的連結地址是 “
https://www.example.com/news/archives.html
”。 -
style
css樣式表
最重要的meta
meta是作為title, base, link等的補充, 而實際上meta型別是開發者常見的優化方向. 本質是key-value.
使用meta要注意:
- 必須指定任意一個:
name
,http-equiv
,charset
, 和itemprop
( 除了itemprop其他的都要同時指定content) - 每個文件必須存在不少於一個有
charset
屬性的meta
元素。
可以自定義meta, 約定好name和value即可, 也可以使用預定義的規範meta.
主要預定義的型別有這幾項:
-
html5簡化了meta的charset寫法, 新增charset屬性用於設定網頁的編碼. 即:
<
進行utf-8(ASCII是utf-8的子集)編碼是因為一般http請求過程, 伺服器會設定編碼格式, 但應對一些非http協議無請求頭, 如file, 就可以避免亂碼情況.
-
具有http-equiv屬性的meta, 執行命令, 一般是新增http頭, 即content-type, 可以同時設定編碼:
<meta http-equiv="content-type" content="text/html; charset=utf-8">
-
name為viewport的meta, 設定網頁縮放, 響應式設計中最常用.
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
上述是移動端響應式設計中最典型的使用, 其中content設定
key
=value
, 中間使用逗號分隔.屬性解釋:
- width:頁面寬度,可以取數值,一般設定成 device-width,即裝置寬度。
- height:頁面高度,可以取數值,一般設定成 device-height,即裝置高度。
- initial-scale:初始縮放比例. (一般為1)
- minimum-scale:最小縮放比例。 (一般為1)
- maximum-scale:最大縮放比例。 (一般為1)
- user-scalable:是否允許使用者縮放。(對於移動端已有響應式設計就設定為no)
-
description\application-name, 前者描述網頁, 後者提供網頁應用的名稱
<meta name=application-name content="mugu"> <meta name="description" content="this is a description>
對於description, 在網頁搜尋中比較重要, 對於資訊的提取也比較高效
而application-name是為網頁應用設定的, 可以用作標籤收藏時的使用, 利於瀏覽器演算法生成.
-
keyword棄用, 很多搜尋引擎不會考慮這些關鍵字,因為該特性是不可靠的甚至會導致垃圾結果,對使用者並沒有幫助。特別是面對一些作弊, 惡意填充的keyword, 瀏覽器搜尋引擎基本不作為考量.
-
referrer, generator, theme-color…
連結
連結包括兩種, 超連結和外部資源連結, 其中核心就是網際網路的URL和URI系統.
URI 指的是一個資源,URL 指的是用地址定位一個資源,URN 指的是用名稱定位一個資源。 即URL 和 URN 是 URI 的子集。 詳細可見引用[4]
在網頁中連結最重要的兩個屬性是rel和href, 前者是Relationship, 指連結目標文件和本文件的關係; 後者表示Hypertext Reference, 指超連結的目標地址. 把握這兩者的對應關係可以更好的理解和使用響應的標籤.
網頁中的連結主要有以下:
link
- rel屬性, 不同的功能
link最主要的使用時連結外部資源. 即外部資源類連結. 常見在head標籤中, 進行stylesheet關係的css檔案引用.
<link rel="stylesheet" type="text/css" href="theme.css">
大多情況向link不會顯示在網頁中, 作為元資料的一類, 其設計的目的是為了瀏覽器和搜尋引擎識別. 比如icon資源, 會被瀏覽器識別:
<link rel="alternate" type="application/atom+xml" href="/blog/news/atom">
<!-- 移動端提供不同解析度, 此處的apple開頭rel為ios特有 -->
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="favicon114.png">
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="favicon72.png">
此外指定不同的rel可以有不同的功能, 如preload預載入一些資原始檔( 只是快取, 未執行, 同常加上type屬性宣告MIME型別 ); 使用prerender可以預渲染頁面, 這在確定使用者會接下的頁面中設定, 來訪問可以極大提升使用者體驗.
<link rel="preload" href="sintel-short.mp4" as="video" type="video/mp4">
<link rel="prerender" href="http://example.com/">
as
屬性指定載入資源的型別,它的值一般有下面幾種。
- script
- style
- image
- media
- document
還有一些其他資訊類的元資料用途, 即提供給搜尋引擎\瀏覽器等, 此類一般為超連結類連結, 當rel指明為:
<!-- 作者資訊 -->
<link rel="author" href="humans.txt">
<!-- 版權資訊 -->
<link rel="license" href="copyright.html">
<!-- 另一個語言的版本, 通常由搜尋引擎判別; 也可由外掛判斷RSS訂閱連結 -->
<link rel="alternate" href="https://es.example.com/" hreflang="es">
<link rel="alternate" type="application/atom+xml" href="/blog/news/atom">
<!-- 聯絡方式 -->
<link rel="me" href="https://google.com/profiles/someone" type="text/html">
<link rel="me" href="mailto:[email protected]">
<link rel="me" href="sms:+15035550125">
<!-- 歷史資料 -->
<link rel="archives" href="http://example.com/archives/">
<!-- 目錄 -->
<link rel="index" href="http://example.com/article/">
<!-- 導航, 主要在分頁瀏覽的業務場景中 -->
<link rel="first" href="http://example.com/article/">
<link rel="last" href="http://example.com/article/?page=42">
<link rel="prev" href="http://example.com/article/?page=1">
<link rel="next" href="http://example.com/article/?page=3">
<!-- 部分來自wangdoc.com -->
當然有些已經被meta元資料替代.
-
media屬性, 外部資源生效的媒介條件
<link href="print.css" rel="stylesheet" media="print"> <link href="mobile.css" rel="stylesheet" media="screen and (max-width: 600px)">
和css的媒體查詢類似, 在不同條件下, 載入不同的檔案資源.
-
其他屬性
<link>
標籤的其他屬性如下。crossorigin
:載入外部資源的跨域設定。href
:外部資源的網址。referrerpolicy
:載入時Referer
頭資訊欄位的處理方法。as
:rel="preload"
或rel="prefetch"
時,設定外部資源的型別。type
:外部資源的 MIME 型別,目前僅用於rel="preload"
或rel="prefetch"
的情況。title
:載入樣式表時,用來標識樣式表的名稱。sizes
:用來宣告圖示檔案的尺寸,比如載入蘋果手機的圖示檔案。
a
a標籤指anchor, 即錨點, 在網路中定下信標就是a標籤的功能. a標籤於link同樣具有rel和href, 也可充當元資料, 且rel的:
alternate \ author \ help \ license \ next \ prev \ search
與link的語義相同, 不同的是, a會顯示在頁面上, 更多是閱讀用途.
除了常用的連結, 還有幾個比較重要的用法:
-
download屬性, 表示當前連結用於下載, 如下例, 檔名為bar.exe, 也可省略.
<a href="foo.exe" download="bar.exe">點選下載</a>
注意,如果連結點選後,伺服器的 HTTP 迴應的頭資訊設定了
Content-Disposition
欄位,並且該欄位的值與download
屬性不一致,那麼該欄位優先,下載時將顯示其設定的檔名。 -
mailto協議, 開啟本機預設的郵件程式傳送郵件
<a href="mailto:[email protected]">聯絡我們</a> <!-- 詳細用法可以指定郵件的主題\日期等, 注意需要轉義, %20為空格 --> <a href="mailto:[email protected][email protected]&subject=The%20subject&body=The%20body" >傳送郵件</a> <!-- 分享網頁的用法 --> <a href="mailto:">告訴朋友</a>
script
作為互動的靈魂, script標籤載入指令碼程式碼, 執行JavaScript程式.
最重要的就是type屬性, 一般預設是"text/javascript". 還有下面一些其他屬性,大部分跟 JavaScript 語言有關.
- async:該屬性指定 JavaScript 程式碼為非同步執行,不是造成阻塞效果,
- JavaScript 程式碼預設是同步執行。
- defer:該屬性指定 JavaScript 程式碼不是立即執行,而是頁面解析完成後執行。
- crossorigin:如果採用這個屬性,就會採用跨域的方式載入外部指令碼,即 HTTP 請求的頭資訊會加上origin欄位。
- integrity:給出外部指令碼的雜湊值,防止指令碼被篡改。只有雜湊值相符的外部指令碼,才會執行。
- nonce:一個密碼隨機數,由伺服器在 HTTP 頭資訊裡面給出,每次載入指令碼都不一樣。它相當於給出了內嵌指令碼的白名單,只有在白名單內的指令碼才能執行。
- referrerpolicy:HTTP 請求的Referer欄位的處理方法。
<noscript>
標籤用於瀏覽器不支援或關閉 JavaScript 時,所要顯示的內容. noscript不是一個功能性標籤, 我個人感覺更像是一種人性化的設計, 雖然有些爭議, 但是在某些層面noscript照顧到一部分人的利益. 可以查閱這篇部落格