meta 标签的作用和结构

meta 标签的作用:

  1. 影响 搜索引擎 检索页面 (SEO)

meta 标签必须有属性 content 表示需要设置的值 meta 标签还有两个可选的属性:name 和 http-equiv

name

name 属性可以用于描述,比如网页的关键词、叙述之类的,下面来看看 name 常用的字段

  • keywords: 告诉 SEO 你页面的关键词类型
  • description:告诉浏览器关于你的网页的一些描述信息
  • viewpoint:移动端窗口相关的信息
  • robots:定义搜索引擎爬虫的索引关系
  • author:页面的作者
  • generator:定义网页制作的软件
  • copyright:版权信息
  • revisit-after:定义爬虫重新访问网站的时间
  • rerender:为一些双核浏览器准备(如360)可以指定用什么内核

基本语法

  1. <meta name="xxx" content="xxx">

应用

  1. /*保留历史记录以及动画效果*/
  2. <meta name="App-Config" content="fullscreen=yes,useHistoryState=yes,transition=yes">
  3. /*是否启用 WebApp 全屏模式*/
  4. <meta name="apple-mobile-web-app-capable" content="yes">
  5. <!-- 设置状态栏的背景颜色,只有在 “apple-mobile-web-app-capable” content=”yes” 时生效 -->
  6. <meta name="apple-mobile-web-app-status-bar-style" content="black">
  7. /*添加到主屏后的标题*/
  8. <meta name="apple-mobile-web-app-title" content="App Title">
  9. /*在网页上方显示一个app banner,提供app store下载*/
  10. <meta name="apple-itunes-app" content="app-id=APP_ID,affiliate-data=AFFILIATE_ID,app-argument=SOME_TEXT"
  11. /*启用360浏览器的极速模式(webkit)*/
  12. <meta name="renderer" content="webkit">
  13. /*uc强制竖屏*/
  14. <meta name="screen-orientation" content="portrait">
  15. /*QQ强制竖屏*/
  16. <meta name="x5-orientation" content="portrait">
  17. /*UC强制全屏*/
  18. <meta name="full-screen" content="yes">
  19. /*QQ强制全屏*/
  20. <meta name="x5-fullscreen" content="true">
  21. /*UC应用模式*/
  22. <meta name="browsermode" content="application">
  23. /*QQ应用模式*/
  24. <meta name="x5-page-mode" content="app">
  25. /*禁止自动探测并格式化手机号码*/
  26. <meta name="format-detection" content="telephone=no">

http-equiv

http-equiv 设置的都是与 http 请求头相关的信息,设置的值会关联到 http 头部。
也就是说,浏览器在请求服务器获取 html 的时候,希望服务器在发送实际文档时,把这些字段放响应头返回给浏览器。

  • content-Type: 指明网页的字符集,建议使用 HTML5 出的 chartset
  • X-UA-Compatible:告诉浏览器以何种版本渲染页面(当然是越新越好)
  • refresh:表示将页面重定向到某个网页
  • window-target:强制页面在当前窗口以独立页面显示, 可以防止别人在框架中调用自己的页面
  • x-dns-prefetch-control:让 a 标签在HTTPS环境下进行 DNS 预解析
  • expires:页面缓存的到期时间,不能精确到秒(且若本地时间与服务端不同步,可能出现缓存失效)
  • pragma:禁止浏览器从本地计算机的缓存中访问页面的内容
  • content-secruity-policy:本质是白名单制度,明确告诉客户端,哪些外部资源可加载和执行
    • script-src:外部脚本
    • style-src:样式表
    • img-src:图像
    • media-src:媒体文件(音频和视频)
    • font-src:字体文件
    • object-src:插件(比如 Flash)
    • child-src:框架
    • frame-ancestors:嵌入的外部资源(比如 <frame> <iframe> <embed> <applet>
    • connect-src:HTTP 连接(通过 XHR、WebSockets、EventSource 等)
    • worker-src:worker 脚本
    • manifest-src:manifest 文件
  • cache-control:用于控制页面的缓存,content值如下
    • no-cache:使用缓存前先向服务器请求确实是否为最新的
    • no-store: 不允许缓存,每次都拿最新的
    • public:缓存所有响应但是不是必须的
    • private:只允许单用户缓存,不允许中继缓存
    • max-age:缓存有效秒数
    • no-siteapp:禁止在移动端访问时网页被转码

      残酷的现实: expires、pragma、cache-control 这些标签往往不会生效

基本语法

  1. <meta name="xxx" content="xxx">

应用

  1. <meta http-equiv="content-type" content="text/html charset=utf8">
  2. <!--
  3. 脚本:只信任当前域名
  4. <object>标签:不信任任何URL,即不加载任何资源
  5. 样式表:只信任cdn.example.org和third-party.org
  6. 框架(frame):必须使用HTTPS协议加载
  7. 其他资源:没有限制
  8. -->
  9. <meta http-equiv="Content-Security-Policy" content="script-src 'self'; object-src 'none'; style-src cdn.example.org third-party.org; child-src https:">

参考资料

《meta标签到底是做什么的|我竟一无所知》
《那些你不知道的meta标签》
《Content Security Policy 入门教程》