前端清单
在将网站发布到生产环境前需要做的所有检查
目录
使用方法
大多数项目都需要检查表中的所有项目, 但是一些元素可以省略或者不是必须的(例如,对于Web管理系统,可能不需要RSS提要)。 我们选择使用3个级别的灵活性:
- 意味着项目是 推荐,但在某些特定情况下可以省略。
- 意味着该项目强烈推荐,并且在某些特定情况下最终可以省略。 一些元素,如果省略,可能会在性能或搜索引擎优化方面造成不好的影响。
- 意味着该项目不能被任何原因省略。 您可能会在您的网页中导致功能障碍,或者有无障碍或SEO问题。 测试优先级需要首先在这些元素上。
有些资源拥有一个表情符号,可以帮助您了解在清单中可以找到哪种类型的内容/帮助:
- 📖: 文件或文章
- 🛠: 在线工具/测试工具
- 📹: 媒体或视频内容
Head
Notes: Head 清单 介绍了所有可以在
head
中出现的元素
Meta 标签
- Doctype: Doctype 是 HTML5,位于所有HTML页面的顶部。
<!-- Doctype HTML5 -->
<!doctype html>
以下 3 个 meta 标签 (Charset, X-UA Compatible and Viewport) 需要在 head 中优先声明.
- Charset: 字符集(UTF-8)被正确地声明.
<!-- Set character encoding for the document -->
<meta charset="utf-8">
- X-UA-Compatible: X-UA-Compatible meta 标签.
<!-- Instruct Internet Explorer to use its latest rendering engine -->
<meta http-equiv="x-ua-compatible" content="ie=edge">
- Viewport: viewport 视口被正确声明.
<!-- Viewport for responsive web design -->
<meta name="viewport" content="width=device-width, initial-scale=1">
- Title: 所有页面上都要使用标题 (SEO: Google计算标题中使用的字符的像素宽度,在472和482像素之间切断。 平均字符数限制约为55个字符).
<!-- Document Title -->
<title>Page Title less than 55 characters</title>
- Description: 提供 description,它是唯一的,不超过150个字符.
<!-- Meta Description -->
<meta name="description" content="Description of the page less than 150 characters">
- Favicons: 每个 favicon 都应该被正确的创建和显示. 如果只有一个
favicon.ico
, 最好将它放在站点的根目录. 通常不需要多余的标记. 然而, 最好像下边的示例一样引用. 现在, 更推荐 PNG 格式 相比.ico
格式 (尺寸: 32x32px).
<!-- Standard favicon -->
<link rel="icon" type="image/x-icon" href="https://example.com/favicon.ico">
<!-- Recommended favicon format -->
<link rel="icon" type="image/png" href="https://example.com/favicon.png">
- Apple Touch Icon: 设置 Apple touch favicon apple-mobile-web-app-capable (创建至少200x200px尺寸的苹果图标文件,以支持您可能需要的所有尺寸).
<!-- Apple Touch Icon -->
<link rel="apple-touch-icon" href="/custom-icon.png">
- Windows Tiles: 预设并引用 Windows tiles.
<!-- Microsoft Tiles -->
<meta name="msapplication-config" content="browserconfig.xml" />
browserconfig.xml文件所需的最小xml标记如下所示:
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square70x70logo src="small.png"/>
<square150x150logo src="medium.png"/>
<wide310x150logo src="wide.png"/>
<square310x310logo src="large.png"/>
</tile>
</msapplication>
</browserconfig>
- Canonical: 使用
rel="canonical"
避免重复的内容.
<!-- Helps prevent duplicate content issues -->
<link rel="canonical" href="http://example.com/2017/09/a-new-article-to-red.html">
HTML tags
- Language attribute: 网站的
lang
属性是指定的,并与当前页面的语言相关.
<html lang="en">
- Direction attribute: 在html标签上指定内容的方向,默认从左到右 (它可以在另一个HTML标签上使用).
<html dir="rtl">
- Alternate language: 您网站的语言标签是指定的,并与当前页面的语言有关
<link rel="alternate" href="https://es.example.com/" hreflang="es">
- Conditional comments: 需要时设置针对IE的条件注释.
-
RSS feed: 如果你的项目是博客 或者有文章,可能需要提供rss链接.
-
Inline critical CSS: 在页面加载期间可见的内容区域 (“高于折叠内容”) 需要的样式叫做 “危急 CSS”. 它应当嵌入到
<style></style>
中的一行 (压缩),并放在主要 CSS调用前.
- 🛠 Critical by Addy Osmani on GitHub automates this.
- CSS order: 所有的css放在
<head>
中并在JavaScript文件加载前. (除了有时JS文件异步加载在页面顶部的情况).
Social meta
Facebook OG 和 Twitter Cards , 对于任何网站,强烈推荐。其他社交媒体标签可以考虑,如果你针对特定的存在,并希望确保显示.
- Facebook Open Graph: 所有 Facebook Open Graph (OG) 文件经过测试确保没有 缺失和错误. Images 至少需要 600 x 315 像素, 推荐 1200 x 630 像素 .
Notes: 使用
og:image:width
和og:image:height
将为爬虫指定图像尺寸,以便它可以立即渲染图像,而不必异步下载和处理它。
<meta property="og:type" content="website">
<meta property="og:url" content="https://example.com/page.html">
<meta property="og:title" content="Content Title">
<meta property="og:image" content="https://example.com/image.jpg">
<meta property="og:description" content="Description Here">
<meta property="og:site_name" content="Site Name">
<meta property="og:locale" content="en_US">
<!-- Next tags are optional but recommended -->
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
- 📖 A Guide to Sharing for Webmasters
- 📖 Best Practices - Sharing
- 🛠 Test your page with the Facebook OG testing
-
Twitter Card:
-
Twitter Card:
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="@site_account">
<meta name="twitter:creator" content="@individual_account">
<meta name="twitter:url" content="https://example.com/page.html">
<meta name="twitter:title" content="Content Title">
<meta name="twitter:description" content="Content description less than 200 characters">
<meta name="twitter:image" content="https://example.com/image.jpg">
- 📖 Getting started with cards — Twitter Developers
- 🛠 Test your page with the Twitter card validator
HTML
最佳实践
- HTML5 Semantic Elements: 恰当地使用HTML5语义元素 (header, section, footer, main…).
-
Error pages: 错误404页面和5xx存在。 请记住,5xx错误页面需要集成CSS(在当前服务器上不需要外部调用).
-
Noopener: 如果你正在使用
target =“_ blank”
的外部链接,你的链接应该有rel =“noopener”
属性来防止制表签名。 如果你需要支持旧版本的Firefox,可以使用rel =“noopener noreferrer”
。
- Clean up comments: 在将页面发布到生产之前,需要删除不必要的代码。
HTML testing
- W3C compliant: 所有页面都需要使用W3C验证器进行测试,以确定HTML代码中可能存在的问题.
- HTML Lint: 我使用工具来帮助我分析我的HTML代码中可能遇到的任何问题。
- Link checker: 在我的页面中没有断开的链接,请确认您没有任何404错误。
- Adblockers test: 您的网站在启用adblockers的情况下正确显示您的内容(您可以提供一条消息,鼓励用户禁用他们的adblocker)
Webfonts
Notes: 使用网页字体可能会导致未样式化文本闪烁 /不可见文本闪烁 - 考虑使用备用字体和/或利用网页加载器来控制行为。
- Webfont format: WOFF, WOFF2 和 TTF 被所有现代浏览器支持.
-
Webfont size: Webfont 大小不要超出 2 MB (包括所有变体).
-
Webfont loader: 使用webfont加载器控制加载行为
CSS
Notes: 看看大多数前端开发人员使用的 CSS指南 and Sass指南。 如果您对CSS属性有疑问, 你可以访问[CSS Reference](http://cssreference.io/)。 还有一个简短的[代码指南](http://codeguide.co/)的一致性。
- Responsive Web Design: 网站正在使用响应式网页设计。
- CSS Print: 提供了一个打印样式表,并且在每个页面上都是正确的。
- Preprocessors: 你的页面正在使用CSS预处理器([Sass](http://sass-lang.com/)是首选)。
- Unique ID: 如果使用ID,则它们对页面是唯一的。
- Reset CSS: CSS重置(reset, normalize 或 reboot)被使用并且是最新的。 *(如果您使用的是像Bootstrap或Foundation这样的CSS框架,则已经包含了Normalize。)
- 📖 Reset.css
- 📖 Normalize.css
- 📖 Reboot
- JS prefix: 所有的类(或在JavaScript文件中使用的id)都以 ** js- ** 开头,而不是放入CSS文件中。
<div id="js-slider" class="my-slider">
<!-- Or -->
<div id="id-used-by-cms" class="js-slider my-slider">
- Embedded or inline CSS: 避免将CSS嵌入到
<style>
标记或使用内联CSS:只用于有效的原因(例如滑块,关键CSS的背景图像)。 - Vendor prefixes: CSS供应商前缀被使用,并与您的浏览器支持兼容性相应生成。
Performance
- Concatenation: CSS文件被连接在一个文件中 (Not for HTTP/2).
- Minification: 所有的CSS文件都被缩小了。
- Non-blocking: CSS文件需要是非阻塞的,以防止DOM花时间加载。
- Unused CSS: 移除未使用的css.
CSS testing
- Stylelint: 所有的CSS或SCSS文件没有任何错误。
-
Responsive web design: 所有页面都在以下断点进行了测试:320px,768px,1024px(根据您的分析可以更多/不同)。
-
CSS Validator: CSS进行了测试,并纠正了相关的错误。
- Desktop Browsers: 所有页面都在当前所有桌面浏览器上进行了测试 (Safari, Firefox, Chrome, Internet Explorer, EDGE…).
- Mobile Browsers: 所有页面都在当前所有移动浏览器上进行测试(Native browser, Chrome, Safari…).
-
OS: 所有页面都在当前所有操作系统上进行了测试 (Windows, Android, iOS, Mac…).
- Pixel perfect: 页面接近像素完美。 根据广告素材的质量,您可能不是100%准确的,但您的页面需要接近您的模板。
- Reading direction: 如果需要支持,所有页面则需要测试LTR和RTL语言。
Images
Notes: 要全面了解图像优化,请查看免费电子书 Essential Image Optimization 。
Best practices
- Optimization: 所有图像都经过优化,在浏览器中呈现。 WebP格式可用于关键页面(如主页)。
- 🛠 Imagemin
- 🛠 使用 ImageOptim 压缩图片
- 🛠 使用 Kraken.io 对于png和jpg优化都非常棒的选择。 免费计划每个文件最多1mb。
- Picture/Srcset: 您可以使用picture / srcset为用户的当前视口提供最合适的图像。
- Retina: 提供布局图像2x或3x,支持视网膜显示。
- Sprite: 小图像在一个精灵文件中(在图标的情况下,它们可以在一个SVG精灵图像中)。
- Width and Height: 如果最终的渲染图像大小是已知的(CSS大小可以省略),在
<img>
上设置width
和height
属性。 - Alternative text: 所有
<img>
都有一个替代文字,可以直观地描述图像。
- Lazy loading: 图像都是懒加载的 (通常还需要 noscript 方案).
JavaScript
Best practices
- JavaScript Inline: 你没有任何内嵌的JavaScript代码(与你的HTML代码混合在一起)。
- Concatenation: JavaScript文件被连接在一起。
- Minification: JavaScript文件被缩小(您可以添加
.min
后缀)。
- JavaScript security:
- Non-blocking: JavaScript文件使用
async
异步加载,或者使用defer
属性延迟加载。
- Modernizr: 如果您需要定位一些特定的功能,您可以使用自定义的Modernizr在您的<html>标签中添加类。
JavaScript testing
- ESLint: 没有错误被ESLint标记(根据您的配置或标准规则)。
Security
扫描并检查您的网站
Best practices
- HTTPS: HTTPS用于每个页面和所有外部内容(插件,图像…)。
- HTTP Strict Transport Security (HSTS): HTTP头设置为“Strict-Transport-Security”。
- Cross Site Request Forgery (CSRF): 确保向您的服务器端发出的请求是合法的,并从您的网站/应用程序发起,以防止CSRF攻击。
- Cross Site Scripting (XSS): 您的页面或网站没有XSS可能的问题。
- Content Type Options 防止Google Chrome浏览器和Internet Explorer尝试将响应的内容类型从服务器声明的内容类型中剔除。
- X-Frame-Options (XFO) 保护您的访问者免受点击劫持攻击。
- Content Security Policy 定义如何在您的网站上加载内容,以及从哪里加载内容。 也可以用来防止点击劫持攻击。
Performance
Best practices
- Page weight: 每个页面的大小在0到500 KB之间。
-
Minified HTML: 您的HTML被压缩。
-
Lazy loading: 图片,脚本和CSS需要被延迟加载,以提高当前页面的响应时间(详见各自的章节)。
-
Cookie size: 如果您使用Cookie,请确保每个Cookie不超过4096个字节,而您的域名没有超过20个Cookie。
- Third party components: 依赖于外部JS(如共享按钮)的第三方iframe或组件将尽可能地由静态组件替换,从而限制对外部API的调用并保持用户活动的私密性。
准备即将到来的请求
- DNS resolution: 可能需要的第三方服务的DNS在空闲时间使用
dns-prefetch
事先解决。
<link rel="dns-prefetch" href="https://example.com">
- Preconnection: DNS查询,TCP握手和TLS协商以及即将需要的服务在空闲时间使用
preconnect
预先完成。
<link rel="preconnect" href="https://example.com">
- Prefetching: 使用
prefetch
,在空闲时间提前请求资源(例如延迟加载的图像)。
<link rel="prefetch" href="image.png">
- Preloading: 当前页面需要的资源(例如脚本放在
<body>
末尾)预先使用preload
。
<link rel="preload" href="app.js">
Performance testing
- Google PageSpeed: 所有的网页都进行了测试(不仅是首页),并且得分至少为90/100。
Accessibility
Notes: 您可以观看播放列表 A11ycasts with Rob Dodson 📹
Best practices
- Progressive enhancement: 主导航和搜索等主要功能应该在没有启用JavaScript的情况下运行。
- Color contrast: 色彩对比至少应通过WCAG AA(移动AAA)。
Headings
- H1: 所有页面都有一个不是网站标题的H1。
- Headings: 标题应按照正确的顺序正确使用(H1到H6)。
Landmarks
- Role banner:
<header>
hasrole="banner"
. - Role navigation:
<nav>
hasrole="navigation"
. - Role main:
<main>
hasrole="main"
.
Semantics
- Specific HTML5 input types are used: 这对于显示不同类型的自定义键盘和小部件的移动设备尤其重要。
Form
- Label: 标签与每个输入表单元素相关联。 如果标签不能显示,请使用
aria-label
。
Accessibility testing
- Accessibility standards testing: 使用WAVE工具来测试您的页面是否遵守可访问性标准。
- Keyboard navigation: 只使用您的键盘以预先确定的顺序测试您的网站。 所有交互元素都可以访问和使用。
- Screen-reader: 所有页面都通过屏幕阅读器(VoiceOver,ChromeVox,NVDA或Lynx)进行测试。
- Focus style: 如果焦点被禁用,则在CSS中被替换为可见状态。
SEO
- Google Analytics: Google Analytics已安装并正确配置。
- Headings logic: 标题文字有助于了解当前页面中的内容。
- sitemap.xml: sitemap.xml存在并已提交到Google Search Console(以前的Google网站管理员工具)。
- robots.txt: robots.txt不会阻止网页。
- 🛠 Test your robots.txt with Google Robots Testing Tool
- Structured Data: Pages using structured data are tested and are without errors. Structured data helps crawlers understand the content in the current page.
- 📖 Introduction to Structured Data - Search - Google Developers
- 🛠 Test your page with the Structured Data Testing Tool
- 🛠 Complete list of vocabularies that can be used as structured data. Schema.org Full Heirarchy
- 📖 RDFa - Linked Data in HTML
- 📖 JSON-LD
- 📖 Microdata
- Sitemap HTML: 提供了HTML sitemap,可以通过您网站页脚中的链接进行访问。
Translation
前端清单也可用其他语言。 感谢所有翻译和他们的工作!
- 🇯🇵 Japanese: miya0001/Front-End-Checklist
- 🇪🇸 Spanish: eoasakura/Front-End-Checklist-ES
- 🇨🇳 Chinese: JohnsenZhou/Front-End-Checklist
- 🇰🇷 Korean: kesuskim/Front-End-Checklist
- 🇧🇷 Portuguese: jcezarms/Front-End-Checklist
- 🇻🇳 Vietnamese: euclid1990/Front-End-Checklist
- 🇹🇼 Traditional Chinese: EngineLin/Front-End-Checklist
- 🇫🇷 French: ynizon/Front-End-Checklist
- 🇷🇺 Russian: ungear/Front-End-Checklist