A Front-End Checklist é uma lista exaustiva de todos elementos que você precisa ter / testar antes de lançar seu site / página HTML em produção.
Ela é baseada em anos de experiência de desenvolvedores Front-End, com as adições provenientes de outras checklists open-source.
Ajude a compartilhar a Front-End Checklist votando e recomendando-a no Product Hunt
Todos itens na Front-End Checklist sĂŁo necesários na maioria dos projetos, mas alguns elementos podem ser omitidos ou nĂŁo sĂŁo tĂŁo essenciais (no caso da administração de um aplicativo web, vocĂŞ pode nĂŁo precisar de um feed RSS por exemplo). NĂłs escolhemos trĂŞs nĂveis de flexibilidade:
- significa que o item é recomendado mas pode ser omitido em algumas situações em particular.
- significa que o item é altamente recomendado e pode eventualmente ser omitido em alguns casos realmente particulares. Alguns elementos, se omitidos, podem ter más repercussões em termos de performance ou SEO.
- significa que o item não pode ser omitido por qualquer razão. Você pode causar uma disfunção na sua página ou ter problemas com acessibilidade ou SEO. A prioridade dos testes precisa estar nestes elementos primeiro.
Alguns recursos possuem um emoticon para ajudar vocĂŞ a entender qual tipo de conteĂşdo / ajuda vocĂŞ pode encontrar na checklist:
- 📖: documentação ou artigo
- đź› : ferramenta online / ferramenta de teste
- đź“ą: mĂdia ou conteĂşdo em vĂdeo
Notas: VocĂŞ pode acessar uma lista com tudo que poderia ser encontrado na
<head>
de um document HTML.
<!-- Doctype HTML5 -->
<!doctype html>
A prĂłximas 3 meta tags (Charset, X-UA Compatible e Viewport) precisam vir primeiro no head.
<!-- Determine o encoding de caracteres para o document -->
<meta charset="utf-8">
<!-- Instrua o Internet Explorer a usar seu mais recente engine de renderização -->
<meta http-equiv="x-ua-compatible" content="ie=edge">
<!-- Viewport para web design responsivo -->
<meta name="viewport" content="width=device-width, initial-scale=1">
- Title: Um tĂtulo Ă© usado em todas páginas (SEO: Google calcula a largura em pĂxel dos caracteres usados no tĂtulo, cortados entre 472 e 482 pĂxels. O limite mĂ©dio de caracteres seria em torno de 55-caracteres).
<!-- TĂtulo do Document -->
<title>TĂtulo de Página menor que 65 caracteres</title>
<!-- Meta Descrição -->
<meta name="description" content="Descrição da página com menos de 150 caracteres">
- Favicons: Cada favicon foi criado e Ă© exibido corretamente. Se vocĂŞ tem apenas um
favicon.ico
, ponha-o na raiz do seu site. Normalmente você não precisa usar nenhum markup. Entretanto, ainda é uma boa prática linkar ele usando o exemplo abaixo. Atualmente, o formato PNG é recomendado ao invés do formato.ico
(dimensões: 32x32px).
<!-- Favicon padrĂŁo -->
<link rel="icon" type="image/x-icon" href="https://example.com/favicon.ico">
<!-- Formato favicon recomendado -->
<link rel="icon" type="image/png" href="https://example.com/favicon.png">
- Apple Touch Icon: O apple touch favicon
apple-mobile-web-app-capable
está presente. (Crie seu arquivo Apple Icon com pelo menos dimensão 200x200px para dar suporte a todas dimensões que você pode precisar)
<!-- Apple Touch Icon -->
<link rel="apple-touch-icon" href="/custom-icon.png">
<!-- Microsoft Tiles -->
<meta name="msapplication-config" content="browserconfig.xml" />
O markup xml mĂnimo necessário para o arquivo browserconfig.xml Ă© como segue:
<?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>
<!-- Ajuda a evitar problemas com conteĂşdo duplicado -->
<link rel="canonical" href="http://example.com/2017/09/a-new-article-to-red.html">
- Atributo de linguagem: A tag de idioma do seu website é especificada e relacionada ao idioma atual da página.
<!-- Indicamos o idioma definido para a página atual -->
<html lang="pt-br">
- Atributo de direção: A direção de leitura é especificada na tag
<html>
(Pode ser usada em outra tag HTML).
<!-- Indicamos a direção de leitura (rtl é sigla para right to left, isto é, da direita para a esquerda) -->
<html dir="rtl">
- đź“– dir - HTML - MDN
- Idioma alternativo: A tag de idioma do seu website é especificada e relacionada ao idioma atual da página.
<!-- Indicamos o idioma definido para a página atual -->
<link rel="alternate" href="https://es.example.com/" hreflang="es">
-
RSS feed: Se seu projeto Ă© um blog ou possui artigos, foi providenciado o link do RSS.
-
CSS CrĂtico inline: CSS que estiliza conteĂşdo que Ă© imediatamente visĂvel durante arregamento de páginas (conteĂşdo "above the fold") Ă© denominado "CSS CrĂtico. Ele Ă© embutido antes da chamada CSS principal e entre
<style></style>
numa linha Ăşnica (minificado).
- Ordem CSS: Todos os arquivos CSS sĂŁo carregados antes de quaisquer arquivos JavaScript files no
<head>
. (Exceto o caso onde, algumas vezes, arquivos JS sĂŁo carregados assĂncronamente no topo da página).
Facebook OG e Twitter Cards sĂŁo, para qualquer website, altamente recomendados. As outras tags de mĂdia social podem ser consideradas se seu pĂşblico-alvo tem uma presença em particular nelas, e vocĂŞ quer se assegurar de exibĂ-las.
- Facebook Open Graph: Todos os Facebook Open Graph (OG) sĂŁo testados e nenhum está faltando ou com informações falsas. Imagens precisam ter no mĂnimo 600 x 315 pĂxels, 1200 x 630 pĂxels recomendados.
<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">
- đź“– Um Guia de Compartilhamento para Webmasters
- 🛠Teste sua página com o 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="Descrição de conteúdo com menos de caracteres">
<meta name="twitter:image" content="https://example.com/image.jpg">
- 📖 Iniciando com cards — Twitter Developers
- 🛠Teste sua página com o Twitter card validator
- HTML5 Semantic Elements: HTML5 Semantic Elements sĂŁo usados apropriadamente (header, section, footer, main...).
- đź“– HTML Reference
-
Páginas de erro: Páginas para Error 404 e 5xx existem. Lembre-se de que páginas de erro 5xx precisam ter seu CSS integrado (sem chamadas externas no servidor atual).
-
Noopener: Caso vocĂŞ esteja usando links externos com
target="_blank"
, seu link deveria ter um atributorel="noopener"
para prevenir tab nabbing. Se você precisa suportar versões mais antigas do Firefox, userel="noopener noreferrer"
.
- đź“– Sobre rel=noopener
- Retirando comentários: Código desnecessário precisa ser removido antes de enviar a página para produção.
- W3C compliant: Todas as páginas precisam ser testadas com o validador W3C para identificar possĂveis problemas no cĂłdigo HTML.
- đź› W3C validator
- HTML Lint: Eu uso ferramentas para me ajudar a analisar quaisquer problemas que eu poderia ter com meu cĂłdigo HTML.
- đź› Dirty markup
- Verificador de Link: Não há links quebrados na minha página, verifique que você não tem nenhum erro 404.
- đź› W3C Link Checker
- Teste Bloqueadores de Publicidade: Seu website mostra o conteúdo corretamente com adblockers habilitados (Você pode providenciar uma mensagem encorajando os usuários a desabilitar o adblocker).
Notas: DĂŞ uma olhada em Guidelines CSS e Guidelines Sass seguidas pela maioria dos desenvolvedores Front-End. Se vocĂŞ tem alguma dĂşvida sobre propriedades CSS, vocĂŞ pode visitar a CSS Reference.
- Web Design Responsivo: O website está usando web design responsivo.
- CSS Print: Uma stylesheet de impressão correta é providenciada em cada página.
- Preprocessors: Sua página está usando um preprocessor CSS (preferencialmente Sass).
- Unique ID: Se IDs são usados, eles são únicos à página.
- Reset CSS: Um CSS reset (reset, normalize ou reboot) está em uso e atualizado. (Se vocĂŞ está usando um Framework CSS como Bootstrap ou Foundation, o Normalize já está incluĂdo.)
- đź“– Reset.css
- đź“– Normalize.css
- đź“– Reboot
- JS prefix: Todas as classes (ou id- usados em arquivos) começam com js- e não estão estilizadas nos arquivos CSS.
<div id="js-slider" class="my-slider">
<!-- ou -->
<div id="id-used-by-cms" class="js-slider my-slider">
- CSS embed ou line: Evite a todo custo o uso de CSS embutido em tags
<style>
ou inline: apenas utilizado por razões válidas (ex: background-image para slider, CSS critical). - Vendor prefixes: Prefixos CSS de vendor são usados e gerados de acordo com sua compatibilidade e suporte a navegadores.
- Concatenation: Arquivos CSS sĂŁo concatenados num arquivo Ăşnico. (NĂŁo para HTTP/2)
- Minification: Todos arquivos CSS sĂŁo minificados.
- Non-blocking: Arquivos CSS precisam ser non-blocking para prevenir o DOM de tirar tempo para carregar.
- đź› UnCSS Online đź›
- đź› PurifyCSS
- đź› Chrome DevTools Coverage
- đź› stylelint, a CSS linter
- đź“– Sass guidelines
-
Responsive web design: Todas as páginas foram testatas nos seguintes breakpoints: 320px, 768px, 1024px (podem ser mais / diferentes de acordo com seu analytics).
-
CSS Validator: O CSS foi testado e erros pertinentes foram corrigidos.
- đź› CSS Validator
- Navegadores Desktop: Todas as páginas foram testadas em todos os navegadores desktop atuais (Safari, Firefox, Chrome, Internet Explorer, EDGE...).
- Navegadores Mobile: Todas as páginas foram testadas em todos os navegadores mobile atuais (Native browser, Chrome, Safari...).
- SO: Todas as páginas foram testadas em todos os Sistemas Operacionais atuais (Windows, Android, iOS, Mac...).
- Pixel perfect: Páginas estão alinhadas com o que foi desenhado. Dependendo na qualidade dos profissionais da área criativa, pode não ser 100% exato, mas sua página precisa estar próxima ao seu template.
- Direção de leitura: Todas as páginas precisam ser testadas para idiomas LTR e RTL se elas precisarem dar esse suporte.
Notas: Para um entendimento completo de otimização de imagem, veja o ebook grátis Essential Image Optimization, do Addy Osmani.
- Optimization: Todas as imagens sĂŁo otimizadas para renderização no navegador. Formato WebP poderia ser usado para páginas crĂticas (como a Homepage).
- đź› Imagemin
- đź› Use ImageOptim para otimizar suas imagens gratuitamente.
- Picture/Srcset: Você usa picture/srcset para providenciar a imagem mais apropriada para o viewport atual do usuário.
- Retina: VocĂŞ providencia imagens em layout x2 ou 3x, e suporta retina display.
- Sprite: Imagens pequenas estĂŁo num arquivo sprite (no caso de Ăcones, eles podem estar num sprite SVG).
- Width e Height: Determine os atributos
width
eheight
em<img>
se a imagem final renderizada Ă© conhecida (pode ser omitido para CSS sizing). - Texto alternativo: Todas as tags
<img>
tĂŞm um texto alternativo que descreve a imagem visualmente.
Nota: Vários desenvolvedores assumem que altura e largura nĂŁo sĂŁo compatĂveis com design web responsivo. Absolutamente nĂŁo Ă© o caso.
- Texto alternativo: Todas tags
<img>
tĂŞm um texto alternativo que as descreve visualmente. - Lazy loading: Imagens sĂŁo lazyloaded (Um noscript fallback Ă© sempre providenciado).
- JavaScript Inline: VocĂŞ nĂŁo tem nenhum cĂłdigo JavaSScript inline (misturado com seu cĂłdigo HTML, por exemplo).
- Concatenation: Arquivos JavaScript sĂŁo concatenados.
- Minification: Arquivos JavaScript sĂŁo minificados (vocĂŞ pode adicionar o sufixo
.min
).
- JavaScript security:
- Non-blocking: Arquivos JavaScript sĂŁo carregados assĂncronamente usando atributo
async
ou deferidos usando atributodefer
.
- Modernizr: Se vocĂŞ precisa visar features especĂficas, Ă© possĂvel usar um Modernizr custom para adicionar classes na sua tag
<html>
.
- ESLint: Nenhum erro Ă© visĂvel pelo ESLint (baseando-se nas sua configuração ou regras prĂ©-estabelecidas).
- HTTP Strict Transport Security (HSTS): O header HTTP está configurado com 'Strict-Transport-Security'.
- Cross Site Request Forgery (CSRF): VocĂŞ certifica requests feitas pro seu server-side sĂŁo legĂtimas e originadas do seu website / app para prevenir ataques CSRF.
- Content Type Options Previne Google Chrome e Internet Explorer de tentar aplicar mime-sniff no content-type de uma response em relação ao que foi declarado no server.
- đź› W3C Validator
-
Lazy loading: Imagens, scripts e CSS precisam ser carregados de modo lazy para melhorar o tempo de resposta da página atual (Veja detalhes nas seções respectivas).
-
Cookie size: Se você está usando cookies, certifique-se de que cada não excede 4096 bytes e que seu domain name não tem mais de 20 cookies.
- đź“– Cookie specification: RFC 6265
- đź“– Cookies
- đź› Browser Cookie Limits
- Componentes de terceiros: Iframes ou componentes de terceiros ("third party") que dependam em JavaScript externo (como botões de compartilhamento) sĂŁo substituidos por componentes estáticos quando possĂvel, assim limitando chamadas a APIs externas, e mantendo privadas as atividades de seus usuários.
- DNS resolution: DNS de serviços de terceiros que podem ser necessários são adiantadamente preparados durante tempo ocioso, usando
dns-prefetch
.
<link rel="dns-prefetch" href="https://example.com">
- Preconnection: DNS lookup, TCP handshake e negociação TLS com serviços que serão necessários em breve, são ambos feitos adiantadamente durante tempo ocioso, usando
preconnect
.
<link rel="preconnect" href="https://example.com">
- Prefetching: Recursos que serão necessários em breve (ex.: imagens em lazy loading) são requisitados adiantadamente durante tempo ocioso, usando
prefetch
.
<link rel="prefetch" href="image.png">
- Preloading: Recursos necessários na página atual (ex.: scripts colocados no fim do
<body>
) adiantadamente usandopreload
.
<link rel="preload" href="app.js">
- Google PageSpeed: Todas suas páginas foram testadas (não só a homepage) e têm um score de pelo menos 90/100.
Notas: VocĂŞ pode assistir a playlist A11ycasts com Rob Dodson đź“ą
- Melhoramento progressivo: Funcionalidades extensivas como a navegação principal e busca deveriam funcionar sem JavaScript habilitado.
- H1: Todas as páginas tĂŞm uma tag H1 que nĂŁo Ă© o tĂtulo do website.
- Cabeçalhos: Cabeçalhos deveriam ser usados apropriadamente, na ordem correta (H1 até H6).
- Role banner:
<header>
temrole="banner"
. - Role navigation:
<nav>
temrole="navigation"
. - Role main:
<main>
temrole="main"
.
- Inputs HTML5 especĂficos sĂŁo utilizados: Isto Ă© especialmente importante para devices mobile, que mostram keypads e widgets customizados para diferentes tipos de input.
- đź“– Mobile Input Types
- Label: Uma label é associada a cada input de um formulário. Caso uma label não possa ser exibida, use
aria-label
.
- Testando padrões de Acessibilidade: Use a ferramenta WAVE para testar se sua página respeita os padrões de acessibilidade.
- đź› Wave testing
- Navegação por Teclado: Teste seu website usando apenas seu teclado numa ordem previsĂvel. Todos elementos interativos sĂŁo alcançáveis e utilizáveis.
- Screen-reader: Todas as páginas foram testadas num screen-reader (VoiceOver, ChromeVox, NVDA ou Lynx).
- Estilo de Foco: Se o foco está desabilitado, ele Ă© substituĂdo por um estado visĂvel em CSS.
- Google Analytics: Google Analytics Ă© corretamente instalado e configurado.
- Headings logic: Texto de cabeçalho ajuda a entender o conteúdo da página atual.
- sitemap.xml: Um sitemap.xml existe e foi submetido ao Google Search Console (anteriormente Google Webmaster Tools).
- robots.txt: O robots.txt não está bloqueando webpages.
- đź› Test seu robots.txt com Google Robots Testing Tool
- Dados Estruturados: Páginas usando dados estruturados são testadas e não possuem erros. Dados estruturados ajudam crawlers a entender o conteúdo da página atual.
- 📖 Introdução a Dados Estruturados - Search - Google Developers
- 🛠Teste sua página com o Ferramenta de Teste de Dados Estruturados
- 🛠Lista completa de vocabulários que podem ser usados como dados estruturados. Schema.org Hierarquia Completa
O Front-End Checklist tambĂ©m está disponĂvel em outros idiomas. Obrigado a todos tradutores por seu incrĂvel trabalho!
- 🇯🇵 Japonês: miya0001/Front-End-Checklist
- 🇪🇸 Espanhol: eoasakura/Front-End-Checklist-ES
- 🇨🇳 Chinês: JohnsenZhou/Front-End-Checklist
- 🇰🇷 Coreano: kesuskim/Front-End-Checklist
- 🇻🇳 Vietnamita: euclid1990/Front-End-Checklist
Se você quer mostrar que está seguindo as regras do Front-End Checklist, ponha esta badge no seu arquivo README!
[![Front‑End_Checklist followed](https://img.shields.io/badge/Front‑End_Checklist-followed-brightgreen.svg)](https://github.com/thedaviddias/Front-End-Checklist/)
Abra uma issue ou uma pull request para sugerir mudanças ou adições.
O repositĂłrio original do Front-End Checklist consiste em duas branches:
Esta branch consiste no arquivo README.md
que Ă© automaticamente refletido no website Front-End Checklist.
Esta branch será usada para fazer algumas mudanças significativas Ă estrutura, conteĂşdo se necessário. É preferĂvel usar a branch master para arrumar erros pequenos ou adicionar um novo item.
Veja todos os incrĂveis contribuidores.
Se vocĂŞ tem alguma pergunta ou sugestĂŁo, nĂŁo hesite em usar o Gitter ou Twitter: