元数据配置
1.项目的语言配置
<html lang="zh-CN">
2.移动端适配
width=device-width:将视口的宽度设置为设备的实际宽度,使得网页能够根据设备屏幕的宽度进行自适应显示。
initial-scale=1.0:设置页面的初始缩放比例为 1.0,即不进行缩放,页面以原始大小显示。
maximum-scale=1.0:设置页面的最大缩放比例为 1.0,用户无法将页面放大超过原始大小。
user-scalable=no:禁止用户手动缩放页面,保证页面布局的稳定性。
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
安卓和苹果移动适配
<!-- iOS Safari配置 -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<link rel="apple-touch-icon" href="/touch-icon-iphone.png">
<!-- Android Chrome配置 -->
<meta name="mobile-web-app-capable" content="yes">
3.PWA配置
PWA 配置的整体作用
提升用户体验:通过设置主题颜色和提供 Web App Manifest,使 Web 应用在外观和操作上更接近原生应用,让用户感觉更熟悉和舒适。
支持离线访问:借助 Service Worker 缓存数据和资源,用户在离线状态下也能继续使用应用的部分功能。
添加到主屏幕:用户可以将 PWA 应用添加到设备的主屏幕,就像安装了一个原生应用一样,方便快速访问。
推送通知:Service Worker 可以处理推送通知,即使应用没有在前台运行,也能向用户发送重要消息。
提高性能:通过缓存机制和优化资源加载,PWA 可以显著提高应用的加载速度和响应性能。
目前绝大多数浏览器都支持pwa。
PWA 配置概述
PWA 的配置主要涉及多个方面,旨在让 Web 应用具备类似原生应用的特性,如离线支持、添加到主屏幕、推送通知等。主要的配置内容包括:
Web App Manifest:通过 manifest.webmanifest 文件提供应用的元数据,如名称、图标、启动画面等。
Service Worker:一个在浏览器后台运行的脚本,负责处理网络请求、缓存数据,实现离线支持和消息推送等功能。
HTTPS 协议:为了保证应用的安全性,PWA 必须通过 HTTPS 协议提供服务。
主题颜色设置:通过 theme-color 元标签设置应用在浏览器中的主题颜色。
具体配置过程:网站添加PWA支持,仅需三步,无视框架的类型_manifest.json 怎样编写-优快云博客
4.SEO优化
可以帮助网页被检索到
<meta name="description" content="项目描述(控制在150字符内)">
<meta name="keywords" content="关键词1,关键词2,关键词3">
5.社交媒体分享
<!-- 社交媒体分享 -->
<meta property="og:title" content="项目标题">
<meta property="og:image" content="/social-share.png">
在网页开发中,社交媒体分享是提高网站曝光度和流量的重要手段。通过设置特定的元标签(如 Open Graph 协议相关的元标签),可以控制网页在社交媒体平台上分享时的显示效果,让分享内容更具吸引力。下面详细介绍社交媒体分享相关内容。
Open Graph 协议概述
Open Graph 协议是由 Facebook 发起的一套元数据标准,它允许网页在社交媒体平台上以更丰富的形式展示。当用户在社交媒体上分享网页时,平台会读取网页中的 Open Graph 元标签信息,从而显示出网页的标题、描述、图片等内容,就像分享原生应用内容一样。除了 Facebook,许多其他社交媒体平台(如 Twitter、LinkedIn 等)也支持 Open Graph 协议。
具体内容请参考:https://juejin.cn/post/7023173942001008670
vite项目请去vite官网中搜PWA即可
6.禁止页面缓存
meta 标签的作用是确保浏览器不会使用过时的缓存数据来显示页面,而是始终从服务器获取最新的内容,或者在必要时验证缓存内容的有效性,从而保证用户看到的是最新的页面信息,常用于需要实时更新数据、不允许使用缓存数据的页面,如包含实时金融数据、敏感信息或动态生成的内容的页面。
<!-- 禁止页面缓存 -->
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
</head>
meta 标签
meta 标签位于 HTML 文档的 <head> 部分,用于提供关于 HTML 文档的元数据,这些元数据不会在页面上直接显示,但会影响浏览器的行为和搜索引擎的索引等。meta 标签可以包含各种属性,用于指定不同类型的元数据,这里使用 http-equiv 属性来模拟 HTTP 响应头字段,以向浏览器传达特定的指令。
http-equiv 属性
http-equiv 属性用于设置 HTTP 响应头字段,它的值会被浏览器解释为相应的 HTTP 头部指令。在这里,http-equiv="Cache-Control" 表示我们要设置与缓存控制相关的 HTTP 头部信息。
content 属性
content 属性用于指定 http-equiv 或 name 属性所定义的元数据的值。在这个例子中,content 属性的值为 "no-cache, no-store, must-revalidate",这是一组用于控制缓存行为的指令:
no-cache
告诉浏览器在每次请求页面时,都要先向服务器发送请求,验证资源是否有更新,而不是直接从本地缓存中加载。这并不意味着浏览器不缓存资源,只是在使用缓存资源之前需要先与服务器进行验证。如果资源没有更新,浏览器可以使用本地缓存;如果资源已更新,浏览器会从服务器获取最新的资源。
no-store
指示浏览器不要在本地存储该页面的任何缓存数据。这意味着浏览器不仅不能直接从缓存中加载页面,而且在请求完成后也不能将获取到的资源存储到本地缓存中。这是为了确保用户始终获取到最新的内容,防止敏感信息或时效性很强的信息被缓存。
must-revalidate
规定一旦缓存的资源过期,在使用之前必须向服务器验证其有效性。如果服务器返回资源未更改的响应,浏览器可以继续使用本地缓存;如果资源已更改,浏览器必须从服务器获取新的资源。这个指令与 no-cache 有些类似,但更加强调在缓存过期后必须进行验证的要求。
referrer:<meta name="referrer" content="no-referrer">
取值及对应含义
no-referrer:表示浏览器在任何情况下都不会发送Referer头信息,对隐私保护最严格,但可能会影响一些依赖来源信息的功能,如某些网站的统计分析工具可能无法准确获取来源数据。
no-referrer-when-downgrade:这是默认值。在从 HTTPS 页面链接到 HTTP 页面时,不会发送Referer头,以防止在安全连接降级时泄露敏感信息。而从 HTTPS 到 HTTPS 或 HTTP 到 HTTP 的链接,则会正常发送Referer头。
same-origin:浏览器只会在链接到同一源(相同的协议、域名和端口)的页面时发送Referer头,链接到其他源的页面时则不会发送,在一定程度上平衡了隐私和功能需求。
origin:发送的Referer头只包含源信息(协议、域名和端口),不包含路径和查询参数等详细信息,能在提供部分来源标识的同时,减少隐私暴露。
strict-origin:在从 HTTPS 页面链接到 HTTP 页面时,只发送源信息,而在其他情况下(如 HTTPS 到 HTTPS)则发送完整的Referer头。
origin-when-cross-origin:对于同域链接,发送完整的Referer头;对于跨域链接,只发送源信息。
strict-origin-when-cross-origin:同域链接发送完整Referer头,跨域链接在 HTTPS 到 HTTPS 的情况下发送源信息,在 HTTPS 到 HTTP 的情况下不发送Referer头。
7.爬虫管理
指令含义
index
该指令告诉搜索引擎机器人可以将当前网页收录到其索引数据库中。当搜索引擎爬虫访问网页时,如果看到 index 指令,就会对页面内容进行分析和处理,并将页面信息添加到搜索引擎的索引里。这样,当用户在搜索引擎中输入相关关键词进行搜索时,该网页就有可能出现在搜索结果中。
与之相反的指令是 noindex,如果设置为 content="noindex,follow",搜索引擎将不会把该页面收录到索引中,即便页面内容质量很高,也不会在搜索结果中展示。
follow
此指令指示搜索引擎机器人可以跟踪并抓取当前网页上的所有链接。当搜索引擎爬虫访问页面时,会顺着页面上的链接去访问其他页面,从而发现更多的网页资源并进行索引。
对应的相反指令是 nofollow,若设置为 content="index,nofollow",搜索引擎会收录当前页面,但不会跟踪页面上的链接,这可以用于阻止搜索引擎对某些链接的访问,比如不想让搜索引擎过多关注的广告链接或低质量链接。
<meta name="robots" content="index,follow">
资源预加载
在 Vue 项目中,既可以在 index.html 中编写这些预加载标签,也可以在 Webpack 或 Vite 里进行配置,下面分别分析不同方式的情况:
在 index.html 中编写
优点
直观且灵活:在 index.html 里直接添加预加载标签非常直观,开发者能清晰看到哪些资源被预加载。并且可以根据具体需求,随时修改预加载的资源路径、类型等信息,不需要复杂的配置文件修改。例如,当需要临时更换预加载的图片时,直接在 index.html 中修改 href 属性即可。
不依赖构建工具:无论使用 Webpack 还是 Vite 等构建工具,或者未来更换构建工具,index.html 中的预加载标签都能正常发挥作用,具有较好的独立性。
适用于特定资源:对于一些特定的、不参与构建流程的资源,如第三方字体文件、外部图片等,在 index.html 中预加载是很合适的方式。因为这些资源可能不会被构建工具自动处理,直接在 index.html 中添加预加载标签能确保它们被正确预加载。
缺点
维护成本较高:如果项目中的资源较多,在 index.html 中手动管理预加载标签会变得繁琐,容易出现遗漏或错误。而且当资源路径发生变化时,需要逐个修改 index.html 中的标签。
缺乏自动化:无法利用构建工具的自动化功能,例如根据环境变量、构建模式等动态调整预加载资源。
在 Webpack 中配置
优点
自动化处理:Webpack 可以通过插件(如 html-webpack-preload-plugin)自动分析项目中的依赖关系,将需要预加载的资源添加到生成的 index.html 中。这样可以减少手动管理预加载标签的工作量,提高开发效率。
动态配置:可以根据不同的构建环境(开发、生产等)动态配置预加载资源。例如,在开发环境中可能不需要预加载某些资源,而在生产环境中则需要,通过 Webpack 的配置可以轻松实现这种差异化处理。
与构建流程集成:Webpack 会对资源进行处理,如压缩、合并等。在配置预加载时,可以利用这些处理后的资源路径,确保预加载的资源是经过优化的。
缺点
配置复杂:使用 Webpack 配置预加载需要了解 Webpack 的插件机制和配置规则,对于新手来说可能有一定的学习成本。
依赖构建工具:如果项目更换构建工具,需要重新配置预加载相关的内容。
在 Vite 中配置
优点
简洁高效:Vite 本身具有快速的构建速度和简洁的配置方式。可以通过 vite-plugin-preload 等插件实现资源预加载,配置相对简单,易于上手。
原生支持 ES 模块:Vite 对 ES 模块的原生支持使得资源的引入和预加载更加自然。可以在代码中直接使用 import 语句引入资源,并通过插件实现预加载,与现代前端开发的理念相契合。
热更新友好:在开发过程中,Vite 的热更新功能可以快速反映预加载配置的变化,提高开发效率。
缺点
插件生态相对较小:相比于 Webpack,Vite 的插件生态还在不断发展中,可能在某些特定场景下,找不到合适的插件来满足预加载需求。
综上所述,在 index.html 中编写预加载标签适合简单项目或对特定资源的预加载;而在 Webpack 或 Vite 中配置预加载则更适合大型项目,能够利用构建工具的自动化和动态配置功能,提高开发效率和资源管理的灵活性。
非模块化资源
<!-- Vite无法分析的CDN字体 -->
<link rel="preload" href="https://cdn.example.com/font.woff2" as="font" crossorigin>
关键渲染路径资源
<!-- 首屏Hero图片 -->
<link rel="preload" as="image" href="hero-banner.webp" imagesrcset="hero-400.webp 400w, hero-800.webp 800w">
第三方SDK初始化脚本
<!-- 支付SDK必须在DOM解析前加载 -->
<link rel="preload" href="https://js.payment-gateway.com/v2/sdk.js" as="script">
第三方脚本管理
是否在 index.html 中引入第三方脚本需要根据具体情况来决定。对于一些全局需要且不经常变动的脚本,可以考虑在 index.html 中引入;而对于一些可以按需使用的脚本,建议采用构建工具配置引入或在组件中按需引入的方式。