Front-End Checklist là một danh sách tương đối đầy đủ về tất cả các yếu tố bạn cần kiểm tra trang web/HTML của mình trước khi đưa chúng tới tay người dùng trên production.
Checklist này được xây dựng bởi các Front-End developer nhiều năm kinh nghiệm, cùng với sự bổ sung và tham khảo từ nhiều open-source checklists khác.
Tất cả các mục trong Front-End Checklist đều được yêu cầu thực hiện cho phần lớn các dự án, nhưng một số phần có thể được bỏ qua hoặc không cần thiết (Ví dụ trong trường hợp của một ứng dụng web liên quan tới quản trị, bạn có thể không cần phải có RSS feed chẳng hạn). Chúng tôi lựa chọn sử dụng 3 cấp độ linh hoạt :
- có nghĩa là mục này được recommended sử dụng nhưng có thể được bỏ qua trong một số tình huống cụ thể.
- có nghĩa là mục này được highly recommended và có thể được bỏ qua trong một số trường hợp thực sự đặc biệt. Một số yếu tố, nếu như bỏ qua có thể có ảnh hưởng xấu về hiệu suất hoặc SEO của trang web.
- có nghĩa là mục này không thể bỏ qua vì bất kỳ lý do nào. Bạn có thể gây ra sự rối loạn trong trang web của bạn hoặc các vấn đề truy cập hoặc SEO. Các yếu tố/mục trong phần này cần được ưu tiên kiểm tra trước tiên.
Một số tài nguyên có biểu tượng cảm xúc để giúp bạn hiểu loại nội dung/trợ giúp bạn có thể tìm thấy trong checklist:
- 📖: Tài liệu hoặc các bài viết
- 🛠: Online tool / testing tool
- 📹: Nội dung media hoặc video
Notes: Bạn có thể tìm thấy một danh sách tất cả mọi thứ liên quan tới thẻ
<head>
của tài liệu HTML.
<!-- Doctype HTML5 -->
<!doctype html>
3 thẻ meta (Charset, X-UA Compatible and Viewport) cần được khai báo đầu tiên ở head.
<!-- Set character encoding for the document -->
<meta charset="utf-8">
<!-- Instruct Internet Explorer to use its latest rendering engine -->
<meta http-equiv="x-ua-compatible" content="ie=edge">
<!-- Viewport for responsive web design -->
<meta name="viewport" content="width=device-width, initial-scale=1">
- Title: Tiêu đề phải được sử dụng trên tất cả các trang (SEO: Google tính toán chiều rộng pixel của các ký tự được sử dụng trong tiêu đề, cắt bỏ giữa 472 và 482 pixel. Số lượng ký tự trung bình giới hạn khoảng 55 ký tự).
<!-- Document Title -->
<title>Page Title less than 65 characters</title>
- Description: Thẻ meta mô tả (description) được khai báo, hãy đảm bảo nó là duy nhất và không hơn 150 ký tự.
<!-- Meta Description -->
<meta name="description" content="Description of the page less than 150 characters">
- Favicons: Hãy đảm bảo mỗi favicon đã được tạo ra và hiển thị chính xác. Nếu bạn chỉ có một tệp tin
favicon.ico
, hãy đặt nó vào thư mục gốc của trang web. Thông thường, bạn sẽ không cần phải sử dụng bất kỳ đánh dấu nào. Tuy nhiên, sẽ là tốt hơn nếu liên kết với nó như ví dụ dưới đây. Ngày nay, định dạng PNG được khuyến khích sử dụng thay cho.ico
(kích thước: 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: Tồn tại Apple touch favicon apple-mobile-web-app-capable. (Hãy tạo ra các tệp tin Apple Icon với kích thước tối thiểu 200x200px để hỗ trợ tất cả các kích thước mà bạn cần)
<!-- Apple Touch Icon -->
<link rel="apple-touch-icon" href="/custom-icon.png">
<!-- Microsoft Tiles -->
<meta name="msapplication-config" content="browserconfig.xml" />
Cấu hình xml tối thiểu cho tệp tin browserconfig.xml như sau:
<?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>
<!-- Helps prevent duplicate content issues -->
<link rel="canonical" href="http://example.com/2017/09/a-new-article-to-red.html">
- Language tag: Thẻ ngôn ngữ trên trang web của bạn được chỉ định và liên quan đến ngôn ngữ của trang hiện tại.
<html lang="en">
- Direction attribute: Hướng văn bản được chỉ định trên thẻ body (Nó có thể được sử dụng trên thẻ HTML khác).
<html dir="rtl">
- Alternate language: Thẻ ngôn ngữ thay thế của trang web của bạn được chỉ định và liên quan đến ngôn ngữ của trang hiện tại.
<link rel="alternate" href="https://es.example.com/" hreflang="es">
-
RSS feed: Nếu dự án của bạn là một blog hoặc có các bài viết, cần cung cấp một liên kết RSS tới chúng.
-
CSS Critical: The CSS critical (hoặc "above the fold") tập hợp tất cả các thành phần CSS được sử dụng để hiển thị một phần trên trang web. Nó được nhúng trước khi CSS chính của bạn được gọi ra và giữa thẻ
<style></style>
trong một dòng (minified).
- CSS order: Tất cả các tệp tin CSS đểu phải được tải trước bất kỳ tệp tin JavaScript nào trong thẻ
<head>
. (Trừ trường hợp đôi khi tệp JS được tải bất đồng bộ trên đầu trang của bạn).
Facebook OG và Twitter Cards thì được khuyến khích sử dụng cho bất kỳ website nào. Các thẻ social media khác có thể được xem xét nếu bạn nhắm mục tiêu một hiện diện cụ thể những trang web đó và muốn đảm bảo hiển thị.
- Facebook Open Graph: Đảm bảo tất cả các Facebook Open Graph (OG) được kiểm thử (tested) và không một thẻ nào bị sai thông tin. Các tệp tin ảnh cần có kích thước tối thiểu là 600 x 315 pixels, khuyến khích sử dụng kích thước sau: 1200 x 630 pixels.
<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">
- 📖 A Guide to Sharing for Webmasters
- 🛠 Test your page with the Facebook OG testing
<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
- HTML5 Semantic Elements: Thành phần ngữ nghĩa HTML5 được sử dụng hợp lý (header, section, footer, main...).
-
Error pages: Tồn tại các trang lỗi 404 và 5xx. Hãy nhớ rằng các trang lỗi 5xx cần phải có tích hợp CSS (không gọi tới css bên ngoài máy chủ hiện tại).
-
Noopener: Trong trường hợp bạn đang sử dụng external links với
target = '_ blank'
, liên kết của bạn phải có thuộc tínhrel ="noopener"
để ngăn chặn tab nabbing. Nếu bạn cần hỗ trợ các phiên bản cũ của Firefox, hãy sử dụngrel ="noopener noreferrer"
.
- W3C compliant: Toàn bộ các page cần phải được kiểm thử với W3C validator để xác định các vấn đề có thể xảy ra trong HTML code.
-
Desktop Browsers: Tất cả các page đều được kiểm thử trên toàn bộ trình duyệt web của desktop (Safari, Firefox, Chrome, Internet Explorer, EDGE...).
-
Mobile Browsers: Tất cả các page đều được kiểm thử trên toàn bộ trình duyệt web của mobile (Native browser, Chrome, Safari...).
-
Link checker: Hãy đảm bảo không có liên kết bị hỏng trong trang web của bạn, hãy xác minh rằng bạn không có bất kỳ lỗi 404 nào.
- Adblockers test: Trang web của bạn hiển thị chính xác nội dung ngay cả khi tính năng chặn quảng cáo trên trình duyệt được kích hoạt (Bạn có thể đưa ra một thông báo khuyến khích mọi người vô hiệu hóa adblocker của họ).
- Pixel perfect: Các page cần đạt tới trạng thái hoàn hảo đến từng pixel. Tùy thuộc vào chất lượng của quảng cáo, có thể không chính xác 100%, nhưng các web page cần phải gần với template của bạn.
Notes: CSS guidelines và Sass Guidelines được follow bởi hầu hết Front-End developers. Nếu bạn gặp vấn đề hay có bất kỳ thắc mắc nào về CSS properties, bạn có thể truy cập CSS Reference.
- Responsive Web Design: Trang web sử dụng thiết kế phản hồi (responsive).
- CSS Print: Một bản in stylesheet đươc cung cấp và chính xác trên mỗi each page.
- Preprocessors: Page của bạn đang sử dụng CSS preprocessor (Ưu tiên Sass).
- Unique ID: Nếu IDs được sử dụng, chúng phải là duy nhất trên một page.
- Reset CSS: CSS reset (reset, normalize hoặc reboot) được sử dụng và luôn được cập nhật. (Nếu bạn đang sử dụng CSS Framework như Bootstrap hoặc Foundation, Normalize đã được bao gồm trong đó.)
- 📖 Reset.css
- 📖 Normalize.css
- 📖 Reboot
- JS prefix: Tất cả các class (hoặc id- được sử dụng trong tệp tin JavaScript) bắt đầu với js- và không được sử dụng làm định dạng trong các tệp tin CSS.
<div id="js-slider" class="my-slider">
<!-- Or -->
<div id="id-used-by-cms" class="js-slider my-slider">
- CSS embed hoặc line: Tránh sử dụng CSS embed hoặc inline: Chỉ sử dụng nếu có lý do chính đáng (Ví dụ: background-image cho slider, CSS quan trọng, ...).
- Vendor prefixes: CSS vendor prefixes được sử dụng và để phù hợp với tính tương thích của trình duyệt.
- Concatenation: Toàn bộ các CSS files cần được concat thành một file duy nhất. (Not for HTTP/2)
- Minification: Toàn bộ các CSS files cần được minify.
- Non-blocking: Toàn bộ các CSS files cần được non-blocking việc ngăn chặn DOM mất thời gian để load.
-
Responsive web design: Tất cả các trang đã được kiểm thử (test) tại breakpoints sau: 320px, 768px, 1024px (có thể thêm / khác theo phân tích của bạn).
-
CSS Validator: Các CSS đã được kiểm thử (test) và lỗi cần thiết đã được chỉnh sửa .
- Reading direction: Tất cả các trang cần phải được kiểm tra với ngôn ngữ LTR và RTL nếu chúng cần phải hỗ trợ.
Notes: Để am hiểu hơn về việc tối ưu hoá hình ảnh, bạn có thể tham khảo ebook miễn phí Essential Image Optimization được viết bởi tác giả Addy Osmani.
- Optimization: Tất cả hình ảnh được tối ưu hóa để hiển thị trên trình duyệt. Định dạng WebP có thể được sử dụng cho các trang web quan trọng (chẳng hạn như trang chủ).
- 🛠 Imagemin
- 🛠 Sử dụng ImageOptim tối ưu hóa hình ảnh của bạn miễn phí.
- Retina: Hãy cung cấp sẵn các layout images x2 hoặc 3x, nhằm hỗ trợ retina display.
- Sprite: Với các hình ảnh nhỏ nên đặt trong một sprite file (Ví dụ như trường hợp các icons, chúng có thể được lưu trong một SVG sprite image).
- Width và Height: Tất cả thẻ
<img>
được thiết lập height (chiều cao) và width (chiều rộng) (Không chỉ định px hoặc %).
Note: Rất nhiều nhà phát triển giả định rằng chiều rộng và chiều cao là không tương thích với các thiết kế responsive web. Điều đó không hoàn toàn đúng trong các trường hợp khác nhau.
- Lazy loading: Các hình ảnh phải được lazyloaded (Noscript dự phòng luôn luôn cung cấp nếu trình duyệt không hỗ trợ javascript).
- JavaScript Inline: Hãy đảm bảo bạn không sử dụng bất cứ JavaScript code inline nào (mixed bên trong HTML code).
- Concatenation: Toàn bộ các JavaScript files được ghép lại (concatenated) thành một file duy nhất.
- Minification: Toàn bộ các JavaScript files được rút gọn (minified) (Bạn có thể thêm hậu tố
.min
vào tên file).
- JavaScript security:
- Non-blocking: Các JavaScript files được nạp bất đồng bộ (loaded asynchronously) sử dụng
async
hoặc deferred sử dụng thuộc tínhdefer
.
- Modernizr: Nếu bạn cần nhắm mục tiêu tới một số tính năng cụ thể, bạn có thể sử dụng một Modernizr tùy chỉnh thêm các class trong thẻ
<html>
của bạn.
- ESLint: Hãy đảm bảo không còn bất kỳ lỗi nào được phát hiện bởi ESLint (Dựa trên các rules do bạn cấu hình hoặc bộ rule tiêu chuẩn).
- HTTPS: Đảm bảo HTTPS được sử dụng trên mọi page và cho toàn bộ external content (plugins, images...).
- Cross Site Request Forgery (CSRF): Bạn cần chắc chắn rằng mọi request từ phía server phải hợp lệ và có nguồn gốc từ website/app của bạn để ngăn chặn tấn công CSRF.
- Content Type Options Ngăn chặn Google Chrome và Internet Explorer cố gắng mime-sniff content-type của response từ một máy chủ
-
Lazy loading: Images, scripts và CSS cần được lazy loaded để cải thiện response time của mỗi page (Xem chi tiết trong các sections tương ứng với images, scripts, css).
-
Cookie size: Nếu bạn đang sử dụng cookie chắc chắn mỗi cookie không vượt quá 4096 byte và tên miền của bạn không có nhiều hơn 20 cookies.
- DNS resolution: DNS của dịch vụ bên thứ ba có thể được phân giải trước trong suốt idle-time bằng cách sử dụng
dns-prefetch
.
<link rel="dns-prefetch" href="https://example.com">
- Preconnection: DNS lookup, TCP handshake và TLS negociation với các dịch vụ cần được thực hiện trước trong idle-time bằng cách sử dụng
preconnect
.
<link rel="preconnect" href="https://example.com">
- Prefetching: Các tài nguyên cần tải (e.g. lazy loaded images) có thể được request trước trong idle-time bằng cách sử dụng
prefetch
.
<link rel="prefetch" href="image.png">
- Preloading: Các tài nguyên cần thiết cho page hiện tại (e.g. scripts được đặt ở cuối thẻ
<body>
) bằng cách sử dụngpreload
.
<link rel="preload" href="app.js">
- Google PageSpeed: Toàn bộ các page của bạn cần được kiểm thử (không chỉ riêng homepage) và phải đạt số điểm tối thiểu 90/100.
Notes: Bạn có thể xem playlist sau A11ycasts with Rob Dodson 📹
- Progressive enhancement: Các chức năng chính như navigation và tìm kiếm nên hoạt động mà không cần kích hoạt JavaScript.
- H1: Tất cả các page phải có thẻ H1 không là tiêu đề của website.
- Headings: Tiêu đề nên được sử dụng đúng cách theo đúng thứ tự (H1 đến H6).
- Role banner:
<header>
córole="banner"
. - Role navigation:
<nav>
córole="navigation"
. - Role main:
<main>
córole="main"
.
- Specific HTML5 input types are used: Điều này đặc biệt quan trọng trên các thiết bị di động hiển thị bàn phím tùy chỉnh và các widgets cho các kiểu khác nhau.
- Label: Mỗi một label (nhãn) được gắn kết với một input form element. Trong trường hợp label không thể hiển thị, hãy sử dụng
aria-label
thay thế.
- Accessibility standards testing: Sử dụng công cụ WAVE để kiểm thử nếu page của bạn tuân theo các tiêu chuẩn về khả năng tiếp cận.
- Keyboard navigation: Kiểm tra trang web của bạn bằng cách chỉ sử dụng bàn phím theo thứ tự được đặt trước. Tất cả các yếu tố tương tác đều có thể truy cập và sử dụng được.
- Screen-reader: Tất cả các page đều được kiểm thử trong trình đọc màn hình (VoiceOver, ChromeVox, NVDA hoặc Lynx).
- Focus style: Nếu
focus
bị vô hiệu hóa, nó được thay thế bằng trạng tháivisible
trong CSS.
- Google Analytics: Google Analytics được cài đặt và định cấu hình chính xác.
- Headings logic: Tiêu đề văn bản giúp nội dung trong trang hiện tại dễ hiểu.
- sitemap.xml: Tồn tại sitemap.xml và được submit cho Google Search Console (Google Webmaster Tools).
- robots.txt: File robots.txt không block webpages.
- 🛠 Kiểm tra robots.txt của website với Google Robots Testing Tool
- Structured Data: Các pages sử dụng dữ liệu có cấu trúc đều được kiểm thử và không có lỗi. Dữ liệu có cấu trúc giúp crawlers hiểu nội dung của page hiện tại.
- 📖 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
- Sitemap HTML: Một sơ đồ trang web HTML (sitemap) được cung cấp và có thể truy cập thông qua một liên kết ở footer của trang web.
Front-End Checklist được dịch sang các ngôn ngữ khác:
- 🇬🇧 Tiếng Anh: thedaviddias/Front-End-Checklist
- 🇯🇵 Tiếng Nhật: miya0001/Front-End-Checklist
- 🇪🇸 Tiếng Tây Ban Nha: eoasakura/Front-End-Checklist-ES
- 🇨🇳 Tiếng Trung: JohnsenZhou/Front-End-Checklist
- 🇰🇷 Tiếng Hàn: kesuskim/Front-End-Checklist
- 🇧🇷 Tiếng Bồ Đào Nha: jcezarms/Front-End-Checklist
Nếu bạn muốn hiển thị rằng bạn đang follow các quy tắc của Front-End Checklist, hãy gắn huy hiệu này lên tập tin README của bạn!
[![Front‑End_Checklist followed](https://img.shields.io/badge/Front‑End_Checklist-followed-brightgreen.svg)](https://github.com/thedaviddias/Front-End-Checklist/)
Mở ra một issue hoặc một pull request khi bạn muốn đề nghị thay đổi hoặc bổ sung.
Front-End Checklist repository chứa 2 nhánh chính:
Nhánh này bao gồm README.md
file tác động trực tiếp đến nội dung trên Front-End Checklist website.
Nhánh này sẽ được sử dụng để tạo ra các thay đổi thay đổi đáng kể trong cơ cấu, nội dung nếu cần thiết. Nó là thích hợp hơn để sử dụng các nhánh chủ để sửa chữa các lỗi nhỏ hoặc thêm một mục mới.
Danh sách những cá nhân đóng góp cho dự án.
Nếu bạn có bất kỳ câu hỏi hoặc lời khuyên nào, đừng ngần ngại liên hệ qua Gitter hoặc Twitter: