La Front-End Checklist es una lista exhaustiva de todos los elementos que necesitas tener/probar antes de lanzar tu sitio/página HTML a producción.
Esta basada en años de experiencia de desarrolladores Front-End, con agregados provenientes de otros checklist de código abierto.
Todos los elementos en la Front-End Checklist son requeridos para la mayorÃa de los proyectos, pero algunos elementos pueden ser omitidos o no son esenciales (por ejemplo, en el caso de una aplicación web administrativa, quizás no necesitas la función de RSS). Elegimos usar 3 niveles de flexibilidad:
significa que el elemento es recomendado pero puede ser omitido en situaciones particulares.
significa que el elemento es altamente recomendado y eventualmente puede ser omitido en casos muy particulares. Algunos elementos, si son omitidos, pueden traer malas repercusiones en términos de rendimiento o SEO.
significa que el elemento no se puede omitir por ningún motivo. Puede causar una anomalÃa en su página, tener problemas de accesibilidad o SEO. Estos elementos deben tener prioridad en el test.
Algunos recursos poseen un emoticón para ayudar a entender el tipo de contenido/ayuda que podrás encontrar en el checklist:
- 📖: documentación o artÃculos
- 🛠: herramienta en lÃnea / herramienta para pruebas
- 📹: media o contenido en video
Nota: Debido a que este documento es una traducción, la documentación, artÃculos, herramientas y medios se encuentran en inglés.
Nota: Puedes encontrar una lista de todo
(traducción en progreso)
lo que puede encontrarse en el<head>
de un documento HTML.
<!-- Doctype HTML5 -->
<!doctype html>
📖 Determinando la codificación de caracteres - HTML5 W3C
(fuente en inglés)
Los siguientes 3 meta etiquetas (Charset, X-UA Compatible and Viewport) necesitan ir primero en el head.
<!-- Declaramos la codificación de juego de caracteres para el documento -->
<meta charset="utf-8">
<!-- Ordenamos a Internet Explorer usar su motor de renderizado más reciente -->
<meta http-equiv="x-ua-compatible" content="ie=edge">
📖 Especificando modos de documento heredado (Internet Explorer)
(fuente en inglés)
<!-- Viewport para diseño web responsivo -->
<meta name="viewport" content="width=device-width, initial-scale=1">
- Title:
El tÃtulo es usado en todas las páginas (SEO: No más de 65 caracteres, tÃtulo del sitio web incluÃdo).
<!-- TÃtulo del documento -->
<title>TÃtulo de página menor a 65 caracteres</title>
📖 TÃtulo - HTML - MDN
(fuente en inglés)
<!-- Meta descripción -->
<meta name="description" content="Descripción de la página en menos de 150 caracteres">
📖 Meta descripción - HTML - MDN
(fuente en inglés)
- Favicons:
Cada favicon se ha creado y mostrado correctamente. Si solo tienes un
favicon.ico
, colocalo en la raÃz de tu sitio. Normalmente no necesitarás usar ningún marcado. Sin embargo, es una buena práctica enlazarlo usando el ejemplo debajo. Al dÃa de hoy, se recomienda el formato PNG sobre el formato.ico
(dimensión: 32x32px).
<!-- Favicon estandar -->
<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">
- 🛠Generador de Favicon
(herramienta en inglés)
- 🛠RealFaviconGenerator
(herramienta en inglés)
- 📖 Favicon Cheat Sheet
(fuente en inglés)
- 📖 Favicons, Touch Icons, Tile Icons, etc. ¿Cuál necesitas? - CSS Tricks
(fuente en inglés)
- 📖 PNG favicons - caniuse
(fuente en inglés)
- Apple Touch Icon:
Apple touch favicon apple-mobile-web-app-capable está presente. (Crea tu archivo Apple Icon con una dimensión de al menos 200x200px para dar soporte a todas las dimensiones que podrÃas necesitar)
<!-- Apple Touch Icon -->
<link rel="apple-touch-icon" href="/custom-icon.png">
📖 Configurando Aplicaciones Web
(fuente en inglés)
<!-- Microsoft Tiles -->
<meta name="msapplication-config" content="browserconfig.xml" />
El marcado xml mÃnimo requerido para el archivo browserconfig.xml es el siguiente:
<?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>
<!-- Ayuda a prevenir problemas de contenido duplicado -->
<link rel="canonical" href="http://example.com/2017/09/a-new-article-to-red.html">
- Language tag:
La etiqueta de lenguaje de tu sitio web está especÃficada y relacionada al lenguaje de la página actual.
<!-- Indicamos el idioma definido para la página actual -->
<html lang="es">
- Direction tag:
La dirección de lectura es especÃficada en la etiqueta body (Puede ser usada en otra etiqueta HTML).
<!-- Indicamos la dirección de lectura (rtl = right to left/ derecha a izquierda) -->
<html dir="rtl">
📖 dir - HTML - MDN
- Alternate language:
La etiqueta de lenguaje de tu sitio web está especÃficada y relacionada al lenguaje de la página actual .
<!-- Indicamos el idioma definido para la página actual -->
<link rel="alternate" href="https://es.example.com/" hreflang="es">
📖 About conditional comments (Internet Explorer) - MSDN - Microsoft
-
RSS feed:
Si tu proyecto es un blog o tiene artÃculos, un enlace RSS fue proprocionado.
-
CSS CrÃtico:
El CSS crÃtico (o "above the fold") contiene todo el CSS usado para renderizar la porción visible de la página. Se incrusta antes de la llamada principal a CSS y entre
<style></style>
en una sola lÃnea (minificado).
- Orden del CSS:
Todos los archivos CSS son cargados antes que cualquier archivo JavaScript en el
<head>
. (Excepto en los casos donde los archivos JS se cargan asÃncronamente en tus páginas).
Facebook OG y Twitter Cards son altamente recomendados para cualquier sitio. Otras etiquetas de medios sociales pueden ser considerados si tienes un objetivo partÃcular y quieres asegurar la visualización.
- Facebook Open Graph:
Todos los Facebook Open Graph (OG) fueron probados y ninguno es erroneo o contiene información falsa. Las imágenes necesitan ser de al menos 600 x 315 pixeles, se recomienda 1200 x 630 pixeles.
<meta property="og:type" content="website">
<meta property="og:url" content="https://example.com/page.html">
<meta property="og:title" content="TÃtulo del contenido">
<meta property="og:image" content="https://example.com/image.jpg">
<meta property="og:description" content="Descripción aquÃ">
<meta property="og:site_name" content="Nombre del sitio">
<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="TÃtulo del contenido">
<meta name="twitter:description" content="Descripción del contenido menor a 200 caracteres">
<meta name="twitter:image" content="https://example.com/image.jpg">
- 📖 Getting started with cards — Twitter Developers
- 🛠Test your page with the Twitter card validator
- Elementos semánticos HTML5:
Los elementos semánticos HTML5 son usados apropiadamente (header, section, footer, main...).
📖 HTML Reference
-
Páginas de error:
Páginas de error 400 y 5xx existen. Recuerda que las páginas de error 5xx necesitan tener su CSS integrado (sin llamadas externas del servidor actual).
-
Noopener:
En caso que uses enlaces externos con
target="_blank"
, tu enlace debe tener un atributorel="noopener"
para evitar tab nabbing. Si necesitas dar soporte a versiones antigüas de Firefox, usarel="noopener noreferrer"
.
📖 About rel=noopener
- Limpiar comentarios:
Código innecesario necesita ser removido antes de enviar la página a producción.
- Obedece al W3C:
Todas las páginas necesitan ser aprobadas por el validador W3C para identificar posibles problemas en el código HTML.
🛠W3C validator
- HTML Lint:
Uso herramientas para ayudarme a analizar cualquier problema que podrÃa tener en mi código HTML.
🛠Dirty markup
-
Navegadores de escritorio:
Todas las páginas fueron probadas en todos los navegadores de escritorio actuales (Safari, Firefox, Chrome, Internet Explorer, Edge...).
-
Navegadores móviles:
Todas las páginas fueron probadas en todos los navegadores móviles actuales (Native browser, Chrome, Safari...).
-
Verificador de enlaces:
No hay enlaces rotos en la página, verifica que no tienes ningún error 404.
🛠W3C Link Checker
- Prueba de Adblockers:
Tu sitio web muesta el contenido correctamente cuando adblockers están habilitados (Puedes incluir un mensaje para sugerir a las personas deshabilitar su adblocker).
- Pixel perfect:
Las páginas son similares al diseño. Dependiendo de la calidad de los creativos, podrÃas no ser 100% exacto, pero tu página necesita verse muy similar a tu plantilla.
Notas: Echa un vistazo a los Lineamientos CSS y Lineamientos Sass seguidos por la mayorÃa de los desarrolladores. Si tienes alguna duda acerca de las propiedades CSS, puedes visitar la Referencia CSS.
- Diseño Web Responsivo:
El sitio wen utiliza diseño web responsivo.
- CSS Print:
Se proporciona una hoja de estilo para impresión y es correcto en cada página.
- Preprocesador:
Tu página utiliza un preprocesador CSS (Sass es recomendado).
- ID único:
Si utilizas IDs, son únicos en la página.
- Reinicio de CSS:
Un reinicio de CSS es usado y está actualizado. (Si utilizas algún Framework CSS como Bootstrap o Foundation, el reinicio de CSS ya está implementado.)
- 📖 Reset.css
- 📖 Normalize.css
- 📖 Reboot
- Prefijos JS:
Todas las clases (o id- usados en archivos JavaScript) comienzan con js- y no son estilizados dentro del archivo CSS.
<div id="js-slider" class="my-slider">
<!-- Or -->
<div id="id-used-by-cms" class="js-slider my-slider">
- CSS incrustado:
Evita a todo costo el CSS inscrustado (directo al HTML): solo usalo por razones válidas (ej: imagen de fondo para un slider, CSS crÃtico).
- Vendor prefixes:
Los vendor prefixes son usados y generados de acuerdo con la compatibilidad de tu navegador. (Si utilizas un preprocesador, esta labor se puede automatizar)
- Concatenado:
Los archivos CSS son concatenados en un solo archivo. (No aplica en HTTP/2)
- Minificado:
Todos los archivos CSS están minificados (estilos en una sola lÃnea).
- No bloquea renderizado:
Los archivos CSS no deben afectar el tiempo carga del DOM.
- 🛠UnCSS Online ðŸ›
- 🛠PurifyCSS
- 🛠Chrome DevTools Coverage
- 🛠stylelint, a CSS linter
- 📖 Sass guidelines
-
Diseño web responsivo:
Todas las páginas fueron probadas en los siguientes puntos: 320px, 768px, 1024px (pueden ser más / varia de acuerdo a tus resultados en analÃtica).
-
Validador CSS:
El CSS fue probado y los errores pertinentes fueron corregidos.
🛠CSS Validator
- Dirección de lectura:
Todas las páginas necesitan ser probadas para idiomas LTR y RTL si necesitan soporte.
Notas: Para un completo entendimiento de la optimización de imágenes, mira el ebook gratuito Essential Image Optimization de Addy Osmani.
- Optimización:
Todas las imágesnes están optimizadas para ser renderizadas en el navegador. El formato WebP puede ser utilizado para páginas crÃticas (como la Página de Inicio).
- 🛠Imagemin
- 🛠Usa ImageOptim para optimizar tus imágenes gratis.
- Retina:
Proporcionas imágenes para layouts x2 o x3, soporte para retina display.
- Sprite:
Las imágenes pequeñas están en un archivo sprite (en el caso de iconos, es recomedable colocarlos en formato SVG).
- Ancho y altura:
Todo las etiquetas
<img>
tienen una altura y ancho establecido (No especificar px o %).
Nota: Muchos desarrolladores asumen que definir el ancho y alto no es compatible con el diseño web responsivo, lo cual no es correcto.
-
Lazy loading:
Las imágenes usan lazy loading (solo cargan cuando están en la parte visible del viewport, siempre se proporciona un fallback que no use script).
-
Texto alternativo:
Todas las imágenes tienen un texto alternativo que las describe.
- 📖 Textos alternativos - La guÃa definitiva
(fuente en inglés)
- JavaScript Incrustado:
No tienes JavaScript incrustado (mezclado con tu código HTML).
- Concatenado:
Los archivos JavaScript están concatenados.
- Minificado:
Los archivos JavaScript están minificados (puedes agregar el subfijo
.min
).
- Seguridad JavaScript:
Guidelines for Developing Secure Applications Utilizing JavaScript*
- No bloquea el renderizado:
Los archivos JavaScript son cargados asÃncronamente usando el atributo
async
o deferidos usando el atributodefer
.
- Modernizr:
Si necesitas apuntar a alguna caracterÃstica especÃfica puedes usar Modernizr para agregar clases a tu etiqueta
<html>
.
- HTTP Strict Transport Security (HSTS):
La cabecera HTTP está configurada como 'Strict-Transport-Security'.
- Cross Site Request Forgery (CSRF):
Asegurate que las peticiones hechas a tu servidor son legÃtimas y orÃginadas desde tu sitio web/aplicación para prevenir ataques CSRF.
📖 Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet - OWASP
- Opciones de Content-Type
Previene a Google Chrome e Internet Explorer intentar ataques mime-sniff al content-type de respuestas no declaradas desde el servidor.
🛠W3C Validator
-
Lazy loading:
Imágenes, scripts y CSS necesitan cargarse implementando lazy loading para mejorar el tiempo de respuesta de la página actual (Mira los detalles en las secciones respectivas)
-
Tamaño de Cookie: Si estás usando cookies asegurate que cada cookie no exceda los 4096 bytes y tu nombre de dominio no tiene más de 20 cookies.
- 📖 Cookie specification: RFC 6265
- 📖 Cookies
- 🛠Browser Cookie Limits
- Resolución de DNS:
Los DNS de servicios de terceros que son necesarios son resueltos por adelantado durante el tiempo de inactividad usando
dns-prefetch
.
<link rel="dns-prefetch" href="https://example.com">
- Pre-conexión:
Búsquedas de DNS, TCP handshakes y negociaciones TLS con servicios que serán requeridos pronto son hechos por adelantado durante el tiempo de inactividad usando
preconnect
.
<link rel="preconnect" href="https://example.com">
- Prefetching:
Recursos que se necesitarán pronto (ej. imágenes con lazy loading) son solicitados por adelantado durante el tiempo de inactividad usando
prefetch
.
<link rel="prefetch" href="image.png">
- Precarga:
Recursos necesarios en la página actual (ej. scripts colocados al final de la etiqueta
<body>
) son solicitados por adelantado usandopreload
.
<link rel="preload" href="app.js">
- Google PageSpeed:
Todas tus páginas fueron probadas (no solo la página de inicio) y tienen una calificación de al menos 90/100.
Notas: Puedes mirar la lista de reproducción A11ycasts with Rob Dodson 📹
- Mejora progresiva:
Las funcionalidad principales, como la navegación y búsquedas, deben funcionar con JavaScript deshabilitado.
🛠Contrast ratio
- H1:
Todas las páginas tienen una etiqueta H1 la cual no es el tÃtulo del sitio web.
- Encabezados:
Los encabezados deben ser usados en el orden correcto (H1 a H6).
📹 Why headings and landmarks are so important -- A11ycasts #18
- Role banner:
<header>
tiene el atributorole="banner"
. - Role navigation:
<nav>
tiene el atributorole="navigation"
. - Role main:
<main>
tiene el atributorole="main"
.
- Tipos de entrada HTML5 especÃficos son usados:
Esto es importante para dispositivos móviles que muestran teclados personalizados y widgets para diferentes tipos.
📖 Mobile Input Types
- Etiqueta:
Una etiqueta
<label>
es asociada a cada elemento del formulario. En caso de que una etiqueta no pueda ser mostrada, usaaria-label
en su lugar.
- Pruebas de estándares de accesibilidad:
Usa la herramienta WAVE para probar si tu página respeta los estándares de accesibilidad.
🛠Wave testing
- Navegación con teclado:
Prueba tu sitio web utlizando solo tu teclado en un orden previsible. Todos los elementos interactivos son alcanzable y pueden usarse.
- Screen-reader:
Todas las páginas son probadas en un screen reader (VoiceOver, ChromeVox, NVDA o Lynx).
- Focus style:
Si se deshabilita el estado focus de los elementos, se reemplaza por un estado visible en CSS.
- Google Analytics:
Google Analytics está instalado y configurado correctamente.
- Lógica de encabezados:
El texto de encabezado ayuda a entender el contenido en la página actual.
- sitemap.xml:
Existe un sitemap.xml y fue enviado por Google Search Console (nombrado Google Webmaster Tools anteriormente).
- robots.txt:
El archivo robots.txt no bloquea páginas.
- 🛠Test your robots.txt with Google Robots Testing Tool
- Datos estructurados:
Las páginas usando datos estructurados son probadas y no contienen errores. Los datos estructurados ayudar a los crawlers a entender el contenido en la página actual.
- 📖 Introduction to Structured Data - Search - Google Developers
- 🛠Test your page with the Structured Data Testing Tool
- Sitemap HTML:
Un sitemap HTML es proporcionado y es accesible con enlaces en el footer del sitio web.
La Front-End Checklist también está disponible en otros idiomas. ¡Gracias a todos los traductores y a su mágnifico trabajo!
- 🇺🇸 Inglés(repositorio principal): thedaviddias/Front-End-Checklist
- 🇯🇵 Japonés: miya0001/Front-End-Checklist
- 🇨🇳 Chino: JohnsenZhou/Front-End-Checklist
- 🇰🇷 Coreano: kesuskim/Front-End-Checklist
- 🇧🇷 Portugués: jcezarms/Front-End-Checklist
- 🇻🇳 Vietnamita: euclid1990/Front-End-Checklist
Si quieres mostrar que estás siguiendo las reglas del Front-End Checklist, pon esta insignia en tu archivo README.
[![Front‑End_Checklist followed](https://img.shields.io/badge/Front‑End_Checklist-followed-brightgreen.svg)](https://github.com/thedaviddias/Front-End-Checklist/)
Abre un issue o un pull requesto para sugerir cambios o añadir información
El repositorio del Front-End Checklist consiste en dos ramas:
Esta rama consiste en el archivo README.md
que se refleja automaticamete en el sitio web Front-End Checklist.
Esta rama será usada para hacer cambios significativos a la estructura o contenido, de ser necesarios. Es preferible usar la rama master para pequeñas correcciones o añadir un nuevo elemento.
Dale un vistazo a todos estos asombrosos contribuyentes.
David Dias, Geoffrey Signorato, Sandeep Ramgolam and Cédric Poilly.