The Front-End Checklist это исчерпывающий список элементов сайта или HTML страницы, которые должны быть проверены перед выпуском в production
Как пользоваться • Contributing • Сайт Product Hunt
Другие чек-дисты:
🎮 Front-End Performance Checklist • 💎 Front-End Design Checklist
Он основан на многолетнем опыте front-end разработчиков и, кроме того, включает в себя части других открытых checklist-ов.
Содержание
Как этим пользоваться?
Все пункты Front-End Checklist обязательны для большинства сайтов, однако некоторые элементы могут быть менее важны или вовсе пропущены (например если вам не нужен RSS для админки приложения). Мы выбрали 3 уровня гибкости:
Некоторые комментарии снабжены иконками, чтобы вы лучше понимали, какой контент или помощь можно найти:
- 📖: документация или статья
- 🛠: он-лайн инструменты / утилиты для проверки
- 📹: медиа или видео контент
Если хотите внести вклад в Front-End Checklist App, прочтите README_APP file.
Head
Примечание: Можно посмотреть список всего, что может быть в
<head>HTML документа.
Мета-теги
<!doctype html> <!-- HTML5 -->
Следующие 2 мета-тега (Charset и Viewport) должны быть расположены в самом начале <head>.
<!-- Задать кодировку документа --> <meta charset="utf-8">
<!-- Задать viewport для responsive дизайна --> <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
- Title:
Задан на всех страницах (SEO: Google рассчитывает ширину символов в title и обрезает примерно от 472 до 482 пикселей. Так что предел длины title около 55 символов).
<!-- Document Title --> <title>Название короче 55 символов</title>
<!-- Meta Description --> <meta name="description" content="Описание страницы короче 150 символов">
- Favicons:
Иконки отображаются корректно. Если у вас только один
favicon.ico, положите его в корень сайта. Обычно вам не нужно ничего добавлять в разметку. Однако, хорошей практикой считается сделать ссылку как в примере ниже. На сегодняшний день рекомендован PNG формат вместо.ico(разрешение: 32x32px).
<!-- Стандартный favicon --> <link rel="icon" type="image/x-icon" href="https://example.com/favicon.ico"> <!-- Рекомендованный формат favicon --> <link rel="icon" type="image/png" href="https://example.com/favicon.png">
<!-- Apple Touch Icon (не меньше, чем 200x200px) --> <link rel="apple-touch-icon" href="/custom-icon.png"> <!-- Развернуть веб-приложение на полный экран --> <meta name="apple-mobile-web-app-capable" content="yes"> <!-- Задаёт стиль для Status Bar (возможные значения смотри по ссылке Supported Meta Tags ниже) --> <!-- Не имеет эффекта, если не выставлен предыдущий тег --> <meta name="apple-mobile-web-app-status-bar-style" content="black">
<!-- Microsoft Tiles --> <meta name="msapplication-config" content="browserconfig.xml" />
Минимальный требуемый browserconfig.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>
<!-- Помогает избежать проблем с дублированным контентом --> <link rel="canonical" href="http://example.com/2017/09/a-new-article-to-red.html">
HTML теги
- Атрибут direction:
Направление текста задано в этом атрибуте тега
html. Также этот атрибут может быть применён к другим тегам.
<link rel="alternate" href="https://es.example.com/" hreflang="es">
-
RSS feed:
Если ваш проект является блогом или содержит страницы, убедитесь, что RSS настроен.
-
Критичные CSS стили заданы inline:
Критичный CSS (critical CSS) - CSS, задающий стили контента видимого сразу же пока идёт процесс загрузки страницы ("above the fold content"). Минифицируйте такой CSS и вставьте внутри
<style></style>перед загрузкой остальных стилей.
- 🛠 Инструмент для автоматизации: Critical by Addy Osmani on GitHub
- Порядок CSS:
Все CSS файлы должны загружаться перед любыми JavaScript файлами в
<head>. (За исключением случаев, когда JS файлы загружаются асинхронно в верху страницы).
Социальные сети
Facebook OG и Twitter Cards крайне рекомендованы для всех сайтов. Добавьте теги для других соц. сетей, если планируете отображаться в них корретно.
- Facebook Open Graph:
Все теги All Facebook Open Graph (OG) протестированы, ни один не пропущен и информация в них верна. Картинки должны быть хотя бы 600 x 315 пикселей. Рекомендуемое разрешение 1200 x 630 пикселей.
Примечание: Используйте
og:image:widthиog:image:heightчтобы указать разрешение картинок для паука (the crawler) для того, чтобы картинки могли быть отрендерены сразу же. Иначе потребуется асинхронная подгрузка и обработка.
<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"> <!-- Следующие теги не обязательны, но рекомендованы --> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="630">
- 📖 A Guide to Sharing for Webmasters
- 📖 Best Practices - Sharing
- 🛠 Протестируйте страницу с 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
- 🛠 Проверьте страницу с Twitter card validator
HTML
Лучшие практики
- Семантические элементы HTML5:
Семантические элементы HTML5 используются должным образом (header, section, footer, main...).
-
Страницы ошибок:
Страницы ошибок 404 и 5xx существуют. Не забывайте, что в страницы ошибок 5xx должны быть включены их стили, чтобы обойтись без подгрузки с сервера.
-
Noopener:
Ссылки на внешние ресурсы с
target="_blank"должны иметь атрибутrel="noopener", чтобы предотвратить фишинговые атаки типа tab nabbing. Если нужно поддерживать старые версии Firefox, используйтеrel="noopener noreferrer".
Тестирование HTML
- Проверка на Adblock:
Сайт корректно отображается c включёнными вырезателями рекламы типа Adblock. Можете показать специальное сообщение с просьбой выключить подобные плагины.
Web-шрифты
Примечание: Использование web-шрифтов может вызвать мерцание или исчезновение текста (FOUT - Flash of Unstyled Text, FOIT - Flash of Invisible Text). Так что убедитесь, что задан резервный шрифт, либо используйте загрузчик шрифтов чтобы держать ситуацию под контролем.
-
Размер web-шрифтов:
Размер шрифтов суммарно не превышает 2 MB.
-
Загрузчик web-шрифтов:
Контролируйте закачку шрифтов с помощью загрузчика.
CSS
Примечание: Ознакомьтесь с CSS guidelines и Sass Guidelines, которых придерживаются большинство разработчиков. Если у вас есть сомнения насчёт CSS свойств, посетите CSS Reference. Кроме того взгляните на короткий гайд Code Guide.
- 📖 Reset.css
- 📖 Normalize.css
- 📖 Reboot
- JS префиксы:
Все классы и id, используемые в JS файлах, начинаются с префикса js- и не участвуют в назначении стилей.
<div id="js-slider" class="my-slider"> <!-- Или --> <div id="id-used-by-cms" class="js-slider my-slider">
Производительность CSS
Тестирование CSS
-
Отзывчивый web-дизайн:
Все страницы были протестированы на следующих контрольных точках: 320px, 768px, 1024px (может быть больше а зависимости от проекта).
- Точное соответствие макету:
В зависимости от проекта и качества макета, перед вами может стоять задача сделать разметку идеально соответствующей дизайну. Используйте специальные инструменты, чтобы проверить вашу реализацию на соответствие макету.
- Направление текста:
Все страницы должны быть протестированы в LTR и RTL языках, если они поддерживаются.
Картинки
Примечание: Для полного понимания оптимизации картинок прочтите бесплатную электронную книгу Essential Image Optimization от Addy Osmani.
Лучшие практики
- Оптимизация:
Все картинки оптимизированы для рендеринга в браузере. Формат WebP может быть использован для критических страниц, например домашняя страница (Homepage).
- 🛠 Imagemin
- 🛠 Используйте ImageOptim для бесплатной оптимизации картинок.
- 🛠 Используйте Kraken.io как крутую альтернативу для оптимизации png и jpg. До 1 Mb бесплатно.
- 🛠 Используйте TinyPNG для оптимизации png, apng (анимированный png) and jpg без потери качества. Есть как платная, так и бесплатная версия.
- 🛠 ZorroSVG jpg-подобное сжатие для прозрачных картинок использованием svg масок.
- 🛠 SVGO инструмент под Nodejs для оптимизации SVG файлов.
- 🛠 SVGOMG web версия SVGO для онлайн оплимизации SVG файлов.
- Picture/Srcset:
Используйте picture/srcset чтобы задать наиболее подходящую картинку для текущего viewport.
JavaScript
Лучшие практики
-
noscripttag:Используйте
<noscript>внутри<body>чтобы задать контент для ситуаций, когда скрипты не поддерживаются или выключены в браузере. Полезно для Single Page Application (React, Angular и т.п.) Пример
<noscript> Для работы приложения необходимо включить JavaScript. </noscript>
- Неблокирующий JS:
JavaScript файлы загружаются асинхронно с использованием атрибута
asyncили отложенно сdefer.
- Оптимизированние и актуальные версии JS библиотек:
Убедитесь, что все загружаемые JS библиотеки действительно необходимы, избавьтесь от неиспользуемых. Несложный функционал предпочтительно реализовывать на чистом (vanilla) JavaScript. Используйте последние версии библиотек. В них меньше ошибок и они более безопасны по сравнению с устаревшими версиями.
Тестирование JavaScript
- ESLint:
ESLint не выдал ошибок, проверяя ваш код. Можно использовать ваш собственный конфиг, или стандартные правила.
Безопасность
Просканируйте и проверьте ваш веб-сайт
Лучшие практики
- HTTPS:
HTTPS используется на всех страницах, а также для всего стороннего контента (плагины, картинки...).
- Защита от фальсификации межсайтовых запросов(Cross Site Request Forgery - CSRF):
Вы гарантируете, что запросы на ваш сервер делаются именно вашим веб-сайтом, чтобы избежать атак CSRF.
- Заголовок Content-Type:
Предотвратить mime-sniff (анализ контента и подмена заголовка content-type) в Google Chrome и Internet Explorer.
- Политика безопасности контента (Content Security Policy):
Задайте правила, определяющие, какой контент и откуда разрешено загружать на ваш сайт. Также это поможет защититься против атак clickjacking.
Производительность
Лучшие практики
- Цели:
Необходимо достичь следующих параметров:
- First Meaningful Paint (показать что-то осмысленное) не позже, чем через 1 секунду
- Time To Interactive (время до первого взаимодействия с пользователем) в течение 5 секунд для "среднего" устройства (смартфон на Android за 200$ медленной 3G сети с 400ms RTT и скоростью передачи 400kbps) и до 2 секунд для следующих визитов
- Размер критичных файлов до 170Kb gzipped
-
Ленивая загрузка (Lazy loading):
Используйте lazy loading для загрузки картинок, скриптов и CSS чтобы уменьшить время инициализации страницы. Смотрите подробнее в соответствующих секция чеклиста.
-
Размер cookie:
Если используете cookies, убедитесь, что их размер не превосходит 4096 байт. Также один домен не должен использовать более 20 cookies.
- Сторонние компоненты (Third party components):
Iframe и сторонние компоненты, полагающиеся на JS с других доменов (типа кнопок "Поделиться"), должны быть, по возможности, заменены на ваши статические компоненты, дабы уменьшить число запросов и избежать возможной утечки данных ваших пользователей.
Подготовка предстоящих запросов (preparing upcoming requests)
- DNS resolution:
DNS сторонних компонентов обозначены в
dns-prefetch, чтобы браузер мог разобраться с этими DNS заранее.
<link rel="dns-prefetch" href="https://example.com">
- Preconnect:
Используйте
preconnect, чтобы браузер мог осуществить DNS lookup, TCP handshake и TLS negotiation заранее во время простоя браузера.
<link rel="preconnect" href="https://example.com">
- Prefetch:
С использованием
prefetchресурсы, которые скоро могут понадобиться, например картинки с lazy loading, будут подгружены заранее во время простоя браузера.
<link rel="prefetch" href="image.png">
- Preload:
preloadзаранее загружает ресурсы, требуемые для текущей страницы, например скрипты в конце<body>.
<link rel="preload" href="app.js">
Тестирование производительности
Доступность
Примечание: Ознакомьтесь с плейлистом A11ycasts with Rob Dodson 📹
Лучшие практики
- Прогрессивное улучшение:
Основной функционал, например навигация и поиск, должны работать даже если JavaScript выключен.
Заголовки
Семантика
- Специальные типы input для HTML5:
Это особенно важно для мобильных устройств, т.к. там используется разные клавиатуры для разных типов вводимых данных.
Формы
Тестирование доступности
SEO
- 🛠 Проверьте robots.txt с Google Robots Testing Tool
- Структурированные данные (Structured Data):
На страницах используются проверенные и правильные структурированные данные. Они помогают паукам (crawlers) понять контент страницы.
- 📖 Introduction to Structured Data - Search - Google Developers
- 🛠 Проверьте свою страницу с Structured Data Testing Tool
- 🛠 Польный список слов, используемых в структурированных данных Schema.org Full Heirarchy
- 📖 RDFa - Linked Data in HTML
- 📖 JSON-LD
- 📖 Microdata
<!-- Example: Pagination link tags for page 2 of a paginated list --> <link rel="prev" href="https://example.com/?page=1"> <link rel="next" href="https://example.com/?page=3">
Перевод
Front-End Checklist также доступен на других языках. Спасибо всем переводчикам за потрясающую работу!
- 🇯🇵 Японский: miya0001/Front-End-Checklist
- 🇪🇸 Испанский: eoasakura/Front-End-Checklist-ES
- 🇨🇳 Китайский: JohnsenZhou/Front-End-Checklist
- 🇰🇷 Корейский: kesuskim/Front-End-Checklist
- 🇧🇷 Португальский: jcezarms/Front-End-Checklist
- 🇻🇳 Вьетнамский: euclid1990/Front-End-Checklist
- 🇹🇼 Традиционный китайский: EngineLin/Front-End-Checklist
- 🇫🇷 Французский: ynizon/Front-End-Checklist
- 🇷🇺 Русский: ungear/Front-End-Checklist
- 🇹🇷 Турецкий: eraycetinay/Front-End-Checklist
- 🇩🇪 Немецкий: xfuture603/Front-End-Checklist
- 🇺🇦 Украинский: antonkryvko/Front-End-Checklist
Front-End Checklist Badge
Вставьте этот бейдж в ваш файл README, если хотите показать, что следуете этому чеклисту!
[](https://github.com/thedaviddias/Front-End-Checklist/)
Содействие
Создайте issue или pull request чтобы предложить изменение или дополнение
Руководство
Репозиторий Front-End Checklist состоит из двух веток:
1. master
Эта ветка состоит из файла README.md, который автоматически отображается на сайте Front-End Checklist.
2. develop
Эта ветка будет использоваться для внесения значительных изменений в структуру или контент. Для устранения мелких ошибок и создания новых элементов предпочтительно использовать ветку master.
Поддержка
Если у вас есть вопросы или пожелания, без колебаний пишите в Gitter или Twitter:
Автор
Помощники
Проект существует благодаря помощи сообщества. [Contribute].
Backers
Thank you to all our backers! 🙏 [Become a backer]
Sponsors
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]
Лицензия
Syncronized with commit 225705b3bb4c7b05a6f818203b408575fe240473
