# Frontend Checklist > 385 frontend best practice rules across HTML, CSS, JavaScript, Accessibility, SEO, Security, Performance, Images, and Testing. Free, open-source. ## Use via MCP (AI Agents) - MCP Endpoint: https://mcp.frontendchecklist.io - MCP Docs: https://frontendchecklist.io/mcp - VS Code: Add `https://mcp.frontendchecklist.io` to .vscode/mcp.json ```json { "mcpServers": { "frontendchecklist": { "type": "http", "url": "https://mcp.frontendchecklist.io" } } } ``` ### MCP Tools - review_code — Audit HTML/CSS/JS against all rules at once - audit_url — Fetch a live URL and audit its HTML automatically - get_workflow — Get ordered checklist for a workflow - get_checklist_rules — Batch-fetch full rules for a checklist - get_rule — Full details for one rule - search_rules — Search by keyword or category - check_rule / fix_rule / explain_rule — Rule-specific prompts - list_categories — All categories with rule counts - get_quick_reference — Compact priority-filtered view ## Resources - [Rules Browser](https://frontendchecklist.io/rules) - [Guides](https://frontendchecklist.io/guides) - [Full Reference](https://frontendchecklist.io/llms-full.txt) - [MCP Docs](https://frontendchecklist.io/mcp) ## Optional - [GitHub](https://github.com/thedaviddias/Front-End-Checklist) ## Categories - [Accessibility](https://frontendchecklist.io/rules/accessibility) — 95 rules, 9 critical, 26 high - [Css](https://frontendchecklist.io/rules/css) — 32 rules, 11 high - [Html](https://frontendchecklist.io/rules/html) — 25 rules, 3 critical, 9 high - [I18n](https://frontendchecklist.io/rules/i18n) — 5 rules - [Images](https://frontendchecklist.io/rules/images) — 25 rules, 1 critical, 15 high - [Javascript](https://frontendchecklist.io/rules/javascript) — 26 rules, 1 critical, 12 high - [Performance](https://frontendchecklist.io/rules/performance) — 43 rules, 1 critical, 22 high - [Privacy](https://frontendchecklist.io/rules/privacy) — 5 rules, 2 high - [Security](https://frontendchecklist.io/rules/security) — 22 rules, 4 critical, 10 high - [Seo](https://frontendchecklist.io/rules/seo) — 94 rules, 19 high - [Testing](https://frontendchecklist.io/rules/testing) — 13 rules, 7 high ## Guides - [How to run a practical Core Web Vitals audit before launch](https://frontendchecklist.io/guides/core-web-vitals-audit-workflow) — Guide, performance - [Why opinionated checklists still beat generic best-practice lists](https://frontendchecklist.io/guides/why-opinionated-checklists-still-beat-generic-best-practices) — Insight, seo ## Rules ### Accessibility - [Do not use aria-hidden on the document body](https://frontendchecklist.io/rules/accessibility/aria-hidden-body) [critical] - [Ensure all input fields have accessible names](https://frontendchecklist.io/rules/accessibility/aria-input-field-name) [critical] - [Provide accessible names for buttons](https://frontendchecklist.io/rules/accessibility/button-name) [critical] - [Prevent seizure-triggering flashing content](https://frontendchecklist.io/rules/accessibility/flashing-content) [critical] - [Associate labels with form controls](https://frontendchecklist.io/rules/accessibility/form-labels) [critical] - [Use logical heading hierarchy](https://frontendchecklist.io/rules/accessibility/heading-hierarchy) [critical] - [Provide alt text for image buttons](https://frontendchecklist.io/rules/accessibility/input-image-alt) [critical] - [Enable keyboard navigation for all elements](https://frontendchecklist.io/rules/accessibility/keyboard-navigation) [critical] - [Support content reflow at 400% zoom](https://frontendchecklist.io/rules/accessibility/zoom-reflow) [critical] - [Provide accessible authentication methods](https://frontendchecklist.io/rules/accessibility/accessible-authentication) [high] - [Provide accessible names for all interactive elements](https://frontendchecklist.io/rules/accessibility/aria-labels) [high] - [Announce dynamic content with ARIA live regions](https://frontendchecklist.io/rules/accessibility/aria-live-regions) [high] - [Ensure ARIA roles contain required child roles](https://frontendchecklist.io/rules/accessibility/aria-required-children) [high] - [Ensure ARIA attributes are valid](https://frontendchecklist.io/rules/accessibility/aria-valid-attr) [high] - [Avoid autoplaying media](https://frontendchecklist.io/rules/accessibility/autoplay-media) [high] - [Meet minimum color contrast ratios](https://frontendchecklist.io/rules/accessibility/color-contrast) [high] - [Ensure content remains usable without CSS](https://frontendchecklist.io/rules/accessibility/content-without-css) [high] - [Use unique IDs for active elements](https://frontendchecklist.io/rules/accessibility/duplicate-id-active) [high] - [Use unique IDs for ARIA references](https://frontendchecklist.io/rules/accessibility/duplicate-id-aria) [high] - [Manage focus during dynamic interactions](https://frontendchecklist.io/rules/accessibility/focus-management) [high] - [Keep focused elements unobscured](https://frontendchecklist.io/rules/accessibility/focus-not-obscured) [high] - [Ensure logical focus order](https://frontendchecklist.io/rules/accessibility/focus-order) [high] - [Use descriptive link text](https://frontendchecklist.io/rules/accessibility/link-text) [high] - [Make modal dialogs keyboard accessible](https://frontendchecklist.io/rules/accessibility/modal-accessibility) [high] - [Support both portrait and landscape orientation](https://frontendchecklist.io/rules/accessibility/orientation) [high] - [Respect reduced motion preferences](https://frontendchecklist.io/rules/accessibility/reduced-motion) [high] - [Avoid redundant entry in the same process](https://frontendchecklist.io/rules/accessibility/redundant-entry) [high] - [Test with screen readers](https://frontendchecklist.io/rules/accessibility/screen-reader-testing) [high] - [Avoid sensory-only instructions](https://frontendchecklist.io/rules/accessibility/sensory-instructions) [high] - [Prevent data loss from session timeouts](https://frontendchecklist.io/rules/accessibility/session-timeout-recovery) [high] - [Include a skip navigation link](https://frontendchecklist.io/rules/accessibility/skip-navigation) [high] - [Support text resizing to 200%](https://frontendchecklist.io/rules/accessibility/text-resizing) [high] - [Provide captions for video content](https://frontendchecklist.io/rules/accessibility/video-captions) [high] - [Make notifications accessible](https://frontendchecklist.io/rules/accessibility/accessible-notifications) [high] - [Use navigation landmark regions](https://frontendchecklist.io/rules/accessibility/navigation-landmark) [high] - [Use semantic table markup for screen readers](https://frontendchecklist.io/rules/accessibility/accessible-tables) - [Ensure accesskey values are unique](https://frontendchecklist.io/rules/accessibility/accesskeys) - [Use only allowed ARIA attributes for each role](https://frontendchecklist.io/rules/accessibility/aria-allowed-attr) - [Provide accessible names for ARIA command elements](https://frontendchecklist.io/rules/accessibility/aria-command-name) - [Avoid using deprecated ARIA roles](https://frontendchecklist.io/rules/accessibility/aria-deprecated-role) - [Ensure dialogs have an accessible name](https://frontendchecklist.io/rules/accessibility/aria-dialog-name) - [Remove focusable elements from aria-hidden containers](https://frontendchecklist.io/rules/accessibility/aria-hidden-focus) - [Provide accessible names for meter elements](https://frontendchecklist.io/rules/accessibility/aria-meter-name) - [Provide accessible names for progress bars](https://frontendchecklist.io/rules/accessibility/aria-progressbar-name) - [Include required ARIA attributes for roles](https://frontendchecklist.io/rules/accessibility/aria-required-attr) - [Ensure ARIA roles are contained by required parent roles](https://frontendchecklist.io/rules/accessibility/aria-required-parent) - [Use valid ARIA role values](https://frontendchecklist.io/rules/accessibility/aria-roles) - [Avoid focusable descendants in role="text" elements](https://frontendchecklist.io/rules/accessibility/aria-text) - [Provide accessible names for toggle fields](https://frontendchecklist.io/rules/accessibility/aria-toggle-field-name) - [Provide accessible names for tooltips](https://frontendchecklist.io/rules/accessibility/aria-tooltip-name) - [Provide accessible names for tree items](https://frontendchecklist.io/rules/accessibility/aria-treeitem-name) - [Use valid values for ARIA attributes](https://frontendchecklist.io/rules/accessibility/aria-valid-attr-value) - [Provide audio descriptions for video](https://frontendchecklist.io/rules/accessibility/audio-descriptions) - [Keep repeated help mechanisms in a consistent location](https://frontendchecklist.io/rules/accessibility/consistent-help) - [Hide decorative elements from assistive technology](https://frontendchecklist.io/rules/accessibility/decorative-elements) - [Use correct definition list structure](https://frontendchecklist.io/rules/accessibility/definition-list) - [Wrap definition items in a definition list](https://frontendchecklist.io/rules/accessibility/dlitem) - [Ensure headings contain text](https://frontendchecklist.io/rules/accessibility/empty-heading) - [Fix empty and broken links](https://frontendchecklist.io/rules/accessibility/empty-links) - [Use a single label for each form field](https://frontendchecklist.io/rules/accessibility/form-field-multiple-labels) - [Provide titles for iframes and frames](https://frontendchecklist.io/rules/accessibility/frame-title) - [Maintain logical heading order](https://frontendchecklist.io/rules/accessibility/heading-order) - [Match lang and xml:lang attributes](https://frontendchecklist.io/rules/accessibility/html-xml-lang-mismatch) - [Ensure identical links have consistent destinations](https://frontendchecklist.io/rules/accessibility/identical-links-same-purpose) - [Use inclusive language](https://frontendchecklist.io/rules/accessibility/inclusive-language) - [Align visible labels with accessible names](https://frontendchecklist.io/rules/accessibility/label-content-name-mismatch) - [Use exactly one main landmark](https://frontendchecklist.io/rules/accessibility/landmark-one-main) - [Use landmark regions correctly](https://frontendchecklist.io/rules/accessibility/landmark-regions) - [Make links in text blocks visually distinguishable](https://frontendchecklist.io/rules/accessibility/link-in-text-block) - [Use correct list structure](https://frontendchecklist.io/rules/accessibility/list-structure) - [Place list items within list containers](https://frontendchecklist.io/rules/accessibility/listitem) - [Avoid meta refresh redirects](https://frontendchecklist.io/rules/accessibility/meta-refresh) - [Provide alternative text for objects](https://frontendchecklist.io/rules/accessibility/object-alt) - [Provide alternatives to parallax effects](https://frontendchecklist.io/rules/accessibility/parallax-effects) - [Allow pasting into form inputs](https://frontendchecklist.io/rules/accessibility/paste-inputs) - [Write in plain language](https://frontendchecklist.io/rules/accessibility/plain-language) - [Avoid scrolljacking and custom scroll behavior](https://frontendchecklist.io/rules/accessibility/scrolljacking) - [Provide accessible names for select elements](https://frontendchecklist.io/rules/accessibility/select-name) - [Use semantic list elements](https://frontendchecklist.io/rules/accessibility/semantic-lists) - [Implement "Skip to Content" links](https://frontendchecklist.io/rules/accessibility/skip-link) - [Use appropriate tabindex values](https://frontendchecklist.io/rules/accessibility/tabindex) - [Ensure tables have unique accessible names](https://frontendchecklist.io/rules/accessibility/table-duplicate-name) - [Define proper table headers](https://frontendchecklist.io/rules/accessibility/table-headers) - [Link table cells to headers using IDs](https://frontendchecklist.io/rules/accessibility/td-headers-attr) - [Ensure table headers associate with data cells](https://frontendchecklist.io/rules/accessibility/th-has-data-cells) - [Provide sufficient touch target size](https://frontendchecklist.io/rules/accessibility/touch-targets) - [Create accessible tooltips](https://frontendchecklist.io/rules/accessibility/accessible-tooltips) - [Make accordions keyboard navigable](https://frontendchecklist.io/rules/accessibility/accordion-accessibility) - [Make carousels accessible](https://frontendchecklist.io/rules/accessibility/carousel-accessibility) - [Make drag and drop accessible](https://frontendchecklist.io/rules/accessibility/draggable-accessibility) - [Make tabs keyboard navigable](https://frontendchecklist.io/rules/accessibility/tabs-accessibility) - [Provide instant anchor scroll option](https://frontendchecklist.io/rules/accessibility/anchor-smooth-scroll) - [Avoid autofocus on form fields](https://frontendchecklist.io/rules/accessibility/autofocus-avoidance) - [Avoid redundant image alternative text](https://frontendchecklist.io/rules/accessibility/image-redundant-alt) - [Avoid images of text](https://frontendchecklist.io/rules/accessibility/text-in-images) ### Css - [Do not disable pinch zoom](https://frontendchecklist.io/rules/css/viewport-zoom) [high] - [Use transform and opacity for animations](https://frontendchecklist.io/rules/css/animation-performance) [high] - [Inline critical CSS for faster rendering](https://frontendchecklist.io/rules/css/css-critical) [high] - [Use CSS custom properties for design tokens](https://frontendchecklist.io/rules/css/css-custom-properties) [high] - [Minify all CSS files](https://frontendchecklist.io/rules/css/css-minification) [high] - [Load CSS without blocking render](https://frontendchecklist.io/rules/css/css-non-blocking) [high] - [Avoid embedded and inline CSS](https://frontendchecklist.io/rules/css/embedded-or-inline-css) [high] - [Provide visible custom focus indicators](https://frontendchecklist.io/rules/css/focus-styles) [high] - [Use relative units for responsive layouts](https://frontendchecklist.io/rules/css/responsive-units) [high] - [Keep CSS specificity low and flat](https://frontendchecklist.io/rules/css/specificity-management) [high] - [Remove unused CSS rules](https://frontendchecklist.io/rules/css/unused-css) [high] - [Use container queries for component-level responsiveness](https://frontendchecklist.io/rules/css/container-queries) - [Use CSS containment to limit repaint scope](https://frontendchecklist.io/rules/css/css-containment) - [Use CSS Grid for two-dimensional layouts](https://frontendchecklist.io/rules/css/css-grid) - [Order CSS files correctly](https://frontendchecklist.io/rules/css/css-order) - [Include a print stylesheet](https://frontendchecklist.io/rules/css/css-print) - [Support dark mode with prefers-color-scheme](https://frontendchecklist.io/rules/css/dark-mode-css) - [Apply Flexbox best practices](https://frontendchecklist.io/rules/css/flexbox-patterns) - [Use readable font sizes on mobile](https://frontendchecklist.io/rules/css/font-size) - [Prevent horizontal scrolling](https://frontendchecklist.io/rules/css/horizontal-scroll) - [Avoid intrusive interstitials](https://frontendchecklist.io/rules/css/interstitials) - [Use CSS logical properties for i18n and RTL support](https://frontendchecklist.io/rules/css/logical-properties) - [Use consistent CSS naming conventions](https://frontendchecklist.io/rules/css/naming-conventions) - [Use a CSS reset or normalize stylesheet](https://frontendchecklist.io/rules/css/reset-css) - [Lint CSS and SCSS files](https://frontendchecklist.io/rules/css/styles-lint) - [Optimize web font formats](https://frontendchecklist.io/rules/css/webfont-format) - [Use @layer to manage CSS cascade order explicitly](https://frontendchecklist.io/rules/css/cascade-layers) - [Use oklch() and oklab() for perceptually uniform colour palettes](https://frontendchecklist.io/rules/css/color-oklch) - [Register CSS custom properties with @property for animation and type safety](https://frontendchecklist.io/rules/css/css-at-property) - [Use :has() to style parent elements based on their descendants](https://frontendchecklist.io/rules/css/has-selector) - [Use CSS subgrid to align nested grid items to parent tracks](https://frontendchecklist.io/rules/css/subgrid) - [Use the View Transitions API for smooth page and component transitions](https://frontendchecklist.io/rules/css/view-transitions) ### Html - [Declare UTF-8 character encoding](https://frontendchecklist.io/rules/html/charset) [critical] - [Use the HTML5 doctype](https://frontendchecklist.io/rules/html/doctype) [critical] - [Set the responsive viewport meta tag](https://frontendchecklist.io/rules/html/viewport) [critical] - [Load scripts with defer, async, or type=module](https://frontendchecklist.io/rules/html/defer-async) [high] - [Validate forms accessibly](https://frontendchecklist.io/rules/html/form-validation) [high] - [Use semantic HTML elements](https://frontendchecklist.io/rules/html/html5-semantic-elements) [high] - [Use semantic input type attributes](https://frontendchecklist.io/rules/html/input-types) [high] - [Set the page lang attribute](https://frontendchecklist.io/rules/html/lang-attribute) [high] - [Add Subresource Integrity to external scripts](https://frontendchecklist.io/rules/html/subresource-integrity) [high] - [Ensure all IDs are unique](https://frontendchecklist.io/rules/html/unique-id) [high] - [Make videos accessible with captions](https://frontendchecklist.io/rules/html/video-accessibility) [high] - [Validate HTML against W3C standards](https://frontendchecklist.io/rules/html/w3c-compliant) [high] - [Create a custom 404 error page](https://frontendchecklist.io/rules/html/404-page) - [Implement accessible breadcrumb navigation](https://frontendchecklist.io/rules/html/breadcrumb-navigation) - [Remove comments and debug code in production](https://frontendchecklist.io/rules/html/clean-up-comments) - [Make custom elements and Web Components accessible](https://frontendchecklist.io/rules/html/custom-element-accessibility) - [Set text direction for RTL languages](https://frontendchecklist.io/rules/html/direction-attribute) - [Implement favicons for all devices](https://frontendchecklist.io/rules/html/favicons) - [Make file uploads accessible](https://frontendchecklist.io/rules/html/file-upload-accessibility) - [Provide noscript fallback content](https://frontendchecklist.io/rules/html/noscript-tag) - [Make pagination accessible](https://frontendchecklist.io/rules/html/pagination-accessibility) - [Make search inputs accessible](https://frontendchecklist.io/rules/html/search-input) - [Add thumbnail images to videos](https://frontendchecklist.io/rules/html/video-thumbnail) - [Link a Web App Manifest for installability](https://frontendchecklist.io/rules/html/web-app-manifest) - [Meet PWA installability criteria](https://frontendchecklist.io/rules/html/pwa-installability) ### I18n - [Use Intl APIs for currency, number, and date formatting](https://frontendchecklist.io/rules/i18n/currency-formatting) - [Add hreflang tags for multilingual sites](https://frontendchecklist.io/rules/i18n/hreflang) - [Handle plural forms with Intl.PluralRules or ICU MessageFormat](https://frontendchecklist.io/rules/i18n/pluralization) - [Design UI components to accommodate text expansion from translation](https://frontendchecklist.io/rules/i18n/text-expansion) - [Use locale-neutral images and provide cultural overrides when needed](https://frontendchecklist.io/rules/i18n/locale-images) ### Images - [Provide meaningful alt text for images](https://frontendchecklist.io/rules/images/alt-text) [critical] - [Fix broken images](https://frontendchecklist.io/rules/images/broken-images) [high] - [Prioritize loading critical images](https://frontendchecklist.io/rules/images/critical-images) [high] - [Set explicit width and height on images](https://frontendchecklist.io/rules/images/dimensions) [high] - [Serve images from a CDN](https://frontendchecklist.io/rules/images/image-cdn) [high] - [Compress images without quality loss](https://frontendchecklist.io/rules/images/image-compression) [high] - [Keep image file sizes within recommended limits](https://frontendchecklist.io/rules/images/image-file-size) [high] - [Optimize all images for web](https://frontendchecklist.io/rules/images/image-optimization) [high] - [Use modern image formats (WebP, AVIF)](https://frontendchecklist.io/rules/images/modern-format) [high] - [Lazy load offscreen images](https://frontendchecklist.io/rules/images/offscreen-lazy) [high] - [Optimise images for faster loading](https://frontendchecklist.io/rules/images/optimized) [high] - [Use with an fallback](https://frontendchecklist.io/rules/images/picture-element) [high] - [Implement responsive images with srcset](https://frontendchecklist.io/rules/images/responsive-images) [high] - [Serve images at the correct display size](https://frontendchecklist.io/rules/images/responsive-size) [high] - [Use srcset for responsive images](https://frontendchecklist.io/rules/images/srcset) [high] - [Use WebP format with fallbacks](https://frontendchecklist.io/rules/images/webp-format) [high] - [Use AVIF format for modern browsers](https://frontendchecklist.io/rules/images/avif-format) - [Use
and
for image captions](https://frontendchecklist.io/rules/images/figure-figcaption) - [Support high-DPI retina displays](https://frontendchecklist.io/rules/images/retina-display) - [Manage inline SVG size and complexity](https://frontendchecklist.io/rules/images/svg-inline) - [Optimize SVG files](https://frontendchecklist.io/rules/images/svg-optimization) - [Handle image loading errors gracefully](https://frontendchecklist.io/rules/images/error-images) - [Use descriptive image filenames](https://frontendchecklist.io/rules/images/filename-quality) - [Use progressive JPEG encoding](https://frontendchecklist.io/rules/images/progressive-jpeg) - [Use image sprites where appropriate](https://frontendchecklist.io/rules/images/sprite-generation) ### Javascript - [Never use eval() or unsafe dynamic code execution](https://frontendchecklist.io/rules/javascript/avoid-eval) [critical] - [Split large JavaScript bundles](https://frontendchecklist.io/rules/javascript/code-splitting) [high] - [Prefer const and let over var](https://frontendchecklist.io/rules/javascript/const-let) [high] - [Handle cross-origin requests securely](https://frontendchecklist.io/rules/javascript/cross-origin-security) [high] - [Debounce and throttle event handlers](https://frontendchecklist.io/rules/javascript/debounce-throttle) [high] - [Minimize costly DOM read/write operations](https://frontendchecklist.io/rules/javascript/dom-performance) [high] - [Implement proper error handling](https://frontendchecklist.io/rules/javascript/error-handling) [high] - [Use ES modules (import/export)](https://frontendchecklist.io/rules/javascript/es-modules) [high] - [Avoid inline JavaScript](https://frontendchecklist.io/rules/javascript/javascript-inline) [high] - [Minify all JavaScript files](https://frontendchecklist.io/rules/javascript/javascript-minification) [high] - [Prevent common memory leak patterns](https://frontendchecklist.io/rules/javascript/memory-leaks) [high] - [Validate external data at runtime with a schema library](https://frontendchecklist.io/rules/javascript/runtime-validation) [high] - [Enable TypeScript strict mode in tsconfig.json](https://frontendchecklist.io/rules/javascript/typescript-strict-mode) [high] - [Remove console statements in production](https://frontendchecklist.io/rules/javascript/console-cleanup) - [Use event delegation for dynamic content](https://frontendchecklist.io/rules/javascript/event-delegation) - [Prefer immutable data patterns](https://frontendchecklist.io/rules/javascript/immutable-patterns) - [Lint JavaScript code](https://frontendchecklist.io/rules/javascript/javascript-linter) - [Parse JSON safely with error handling](https://frontendchecklist.io/rules/javascript/json-safety) - [Use modern array and object methods](https://frontendchecklist.io/rules/javascript/modern-array-methods) - [Avoid the any type — use unknown, generics, or type guards instead](https://frontendchecklist.io/rules/javascript/no-explicit-any) - [Enable noUncheckedIndexedAccess to catch out-of-bounds array bugs](https://frontendchecklist.io/rules/javascript/no-unchecked-indexed-access) - [Use scheduler.yield() to keep the main thread responsive during long tasks](https://frontendchecklist.io/rules/javascript/scheduler-yield) - [Write internationalisation-friendly translation strings](https://frontendchecklist.io/rules/javascript/translation-strings) - [Avoid implicit type coercion](https://frontendchecklist.io/rules/javascript/type-coercion) - [Use Web Storage API safely](https://frontendchecklist.io/rules/javascript/web-storage) - [Use import type for type-only imports](https://frontendchecklist.io/rules/javascript/type-only-imports) ### Performance - [Optimize largest contentful paint](https://frontendchecklist.io/rules/performance/largest-contentful-paint) [critical] - [Analyze performance with WebPageTest](https://frontendchecklist.io/rules/performance/webpagetest) [high] - [Optimize pages for back/forward cache](https://frontendchecklist.io/rules/performance/back-forward-cache) [high] - [Enable browser caching](https://frontendchecklist.io/rules/performance/browser-caching) [high] - [Use a content delivery network](https://frontendchecklist.io/rules/performance/cdn) [high] - [Enable text-based compression](https://frontendchecklist.io/rules/performance/compression) [high] - [Implement Google Consent Mode v2](https://frontendchecklist.io/rules/performance/consent-mode) [high] - [Minimize critical request chains](https://frontendchecklist.io/rules/performance/critical-request-chains) [high] - [Minimize cumulative layout shift](https://frontendchecklist.io/rules/performance/cumulative-layout-shift) [high] - [Optimize first contentful paint](https://frontendchecklist.io/rules/performance/first-contentful-paint) [high] - [Optimize web font loading](https://frontendchecklist.io/rules/performance/font-loading) [high] - [Minimize HTTP requests](https://frontendchecklist.io/rules/performance/http-requests) [high] - [Enable HTTP/2 or HTTP/3](https://frontendchecklist.io/rules/performance/http2) [high] - [Load non-critical code on user interaction](https://frontendchecklist.io/rules/performance/import-on-interaction) [high] - [Load non-critical code when content approaches the viewport](https://frontendchecklist.io/rules/performance/import-on-visibility) [high] - [Optimize interaction to next paint](https://frontendchecklist.io/rules/performance/interaction-to-next-paint) [high] - [Implement lazy loading for offscreen content](https://frontendchecklist.io/rules/performance/lazy-loading) [high] - [Virtualize long lists and tables](https://frontendchecklist.io/rules/performance/list-virtualization) [high] - [Show loading indicators](https://frontendchecklist.io/rules/performance/loading-indicators) [high] - [Keep page load time under 3 seconds](https://frontendchecklist.io/rules/performance/page-load-time) [high] - [Keep page weight under 1500KB](https://frontendchecklist.io/rules/performance/page-weight) [high] - [Use resource hints for faster loading](https://frontendchecklist.io/rules/performance/resource-hints) [high] - [Optimize third-party script loading](https://frontendchecklist.io/rules/performance/third-party-scripts) [high] - [Convert animated GIFs to video](https://frontendchecklist.io/rules/performance/animated-content) - [Perform browser-based performance audits](https://frontendchecklist.io/rules/performance/browser-required) - [Optimize CSS file size](https://frontendchecklist.io/rules/performance/css-file-size) - [Reduce DOM size and complexity](https://frontendchecklist.io/rules/performance/dom-size) - [Remove duplicate JavaScript libraries](https://frontendchecklist.io/rules/performance/duplicate-js) - [Use fetchpriority to hint resource loading priority](https://frontendchecklist.io/rules/performance/fetchpriority-attribute) - [Optimize Google Tag Manager implementation](https://frontendchecklist.io/rules/performance/gtm-present) - [Optimize JavaScript bundle size](https://frontendchecklist.io/rules/performance/js-file-size) - [Use secure and up-to-date JS libraries](https://frontendchecklist.io/rules/performance/js-libraries) - [Avoid JavaScript-based redirects](https://frontendchecklist.io/rules/performance/js-redirects) - [Disable lazy loading for above-the-fold content](https://frontendchecklist.io/rules/performance/lazy-above-fold) - [Avoid serving legacy JavaScript to modern browsers](https://frontendchecklist.io/rules/performance/legacy-js) - [Use preconnect for critical third-party origins](https://frontendchecklist.io/rules/performance/preconnect) - [Eliminate render-blocking resources](https://frontendchecklist.io/rules/performance/render-blocking) - [Register a service worker for caching and offline support](https://frontendchecklist.io/rules/performance/service-worker) - [Provide source maps for production debugging](https://frontendchecklist.io/rules/performance/source-maps) - [Stream HTML to the browser before the full response is ready](https://frontendchecklist.io/rules/performance/streaming-html) - [Reduce Time to First Byte (TTFB)](https://frontendchecklist.io/rules/performance/ttfb) - [Provide an offline fallback page](https://frontendchecklist.io/rules/performance/offline-fallback) - [Use the Speculation Rules API to prefetch and prerender navigations](https://frontendchecklist.io/rules/performance/speculation-rules) ### Privacy - [Show a cookie consent notice](https://frontendchecklist.io/rules/privacy/cookie-consent) [high] - [Link to your privacy policy in the footer](https://frontendchecklist.io/rules/privacy/privacy-policy) [high] - [Collect only the minimum personal data necessary](https://frontendchecklist.io/rules/privacy/data-minimisation) - [Implement a user-facing data deletion mechanism](https://frontendchecklist.io/rules/privacy/right-to-erasure) - [Avoid third-party cookies](https://frontendchecklist.io/rules/privacy/third-party-cookies) ### Security - [Submit forms over HTTPS](https://frontendchecklist.io/rules/security/form-https) [critical] - [Redirect HTTP to HTTPS](https://frontendchecklist.io/rules/security/http-to-https) [critical] - [Serve all pages over HTTPS](https://frontendchecklist.io/rules/security/https) [critical] - [Leaked Environment Variables](https://frontendchecklist.io/rules/security/leaked-secrets) [critical] - [Implement a content security policy](https://frontendchecklist.io/rules/security/content-security-policy) [high] - [Audit dependencies for known vulnerabilities](https://frontendchecklist.io/rules/security/dependency-audit) [high] - [Set an HSTS header](https://frontendchecklist.io/rules/security/hsts) [high] - [Avoid mixed content on HTTPS pages](https://frontendchecklist.io/rules/security/mixed-content) [high] - [Secure password input fields](https://frontendchecklist.io/rules/security/password-field-security) [high] - [Set Secure, HttpOnly, and SameSite flags on session cookies](https://frontendchecklist.io/rules/security/session-cookie-flags) [high] - [Prevent stack trace exposure in production error responses](https://frontendchecklist.io/rules/security/stack-trace-exposure) [high] - [Store authentication tokens securely](https://frontendchecklist.io/rules/security/token-storage-security) [high] - [Set X-Content-Type-Options: nosniff](https://frontendchecklist.io/rules/security/x-content-type) [high] - [Set an X-Frame-Options header](https://frontendchecklist.io/rules/security/x-frame-options) [high] - [Use COOP, COEP, and CORP for cross-origin isolation when needed](https://frontendchecklist.io/rules/security/cross-origin-isolation) - [Protect public forms with CAPTCHA](https://frontendchecklist.io/rules/security/form-captcha) - [External Link Security](https://frontendchecklist.io/rules/security/new-tab) - [Set a Permissions-Policy header](https://frontendchecklist.io/rules/security/permissions-policy) - [Set a Referrer-Policy header](https://frontendchecklist.io/rules/security/referrer-policy) - [Link to your terms of service in the footer](https://frontendchecklist.io/rules/security/terms-of-service) - [Blocked Tracking Links](https://frontendchecklist.io/rules/security/blocked-links) - [Adblock Element Hiding](https://frontendchecklist.io/rules/security/element-hiding) ### Seo - [Implement valid Article structured data](https://frontendchecklist.io/rules/seo/article) [high] - [Resolve internal broken links](https://frontendchecklist.io/rules/seo/broken-links) [high] - [Set canonical URLs for all pages](https://frontendchecklist.io/rules/seo/canonical-url) [high] - [Write a meta description for each page](https://frontendchecklist.io/rules/seo/meta-description) [high] - [Meta Tags in Body](https://frontendchecklist.io/rules/seo/meta-in-body) [high] - [Write a descriptive page title](https://frontendchecklist.io/rules/seo/meta-title) [high] - [Noindex in Sitemap](https://frontendchecklist.io/rules/seo/noindex-in-sitemap) [high] - [Publish high-quality content](https://frontendchecklist.io/rules/seo/quality) [high] - [Avoid multi-hop redirect chains](https://frontendchecklist.io/rules/seo/redirect-chain) [high] - [Robots Meta Conflict](https://frontendchecklist.io/rules/seo/robots-meta-conflict) [high] - [Set robots meta directives correctly](https://frontendchecklist.io/rules/seo/robots-meta) [high] - [Publish a robots.txt file](https://frontendchecklist.io/rules/seo/robots-txt) [high] - [Schema + Noindex Conflict](https://frontendchecklist.io/rules/seo/schema-noindex-conflict) [high] - [4XX Pages in Sitemap](https://frontendchecklist.io/rules/seo/sitemap-4xx) [high] - [Keep XML sitemaps valid](https://frontendchecklist.io/rules/seo/sitemap-valid) [high] - [Create and submit an XML sitemap](https://frontendchecklist.io/rules/seo/sitemap) [high] - [Add structured data markup](https://frontendchecklist.io/rules/seo/structured-data) [high] - [Keep page titles unique](https://frontendchecklist.io/rules/seo/title-unique) [high] - [Identify YMYL content on your site](https://frontendchecklist.io/rules/seo/ymyl-detection) [high] - [Check for broken links](https://frontendchecklist.io/rules/seo/link-checker) - [Create a dedicated About page](https://frontendchecklist.io/rules/seo/about-page) - [Provide clear affiliate disclosures](https://frontendchecklist.io/rules/seo/affiliate-disclosure) - [Audit and refine AI-generated content](https://frontendchecklist.io/rules/seo/ai-content) - [Audit all noindex pages](https://frontendchecklist.io/rules/seo/all-noindex-pages) - [Use descriptive anchor text](https://frontendchecklist.io/rules/seo/anchor-text) - [Optimize article link density](https://frontendchecklist.io/rules/seo/article-links) - [Display clear author bylines](https://frontendchecklist.io/rules/seo/author-byline) - [Highlight author credentials and expertise](https://frontendchecklist.io/rules/seo/author-expertise) - [Implement comprehensive author markup](https://frontendchecklist.io/rules/seo/author-info) - [Implement valid BreadcrumbList schema](https://frontendchecklist.io/rules/seo/breadcrumb) - [Fix or remove broken external links](https://frontendchecklist.io/rules/seo/broken-external-links) - [Fix malformed HTML structure](https://frontendchecklist.io/rules/seo/broken-html) - [Avoid redirect chains on canonical URLs](https://frontendchecklist.io/rules/seo/canonical-chain) - [Sync HTML canonical tags and Link headers](https://frontendchecklist.io/rules/seo/canonical-header) - [Cite authoritative external sources](https://frontendchecklist.io/rules/seo/citations) - [Create a comprehensive Contact page](https://frontendchecklist.io/rules/seo/contact-page) - [Show published and updated dates](https://frontendchecklist.io/rules/seo/content-dates) - [Add outgoing links to dead-end pages](https://frontendchecklist.io/rules/seo/dead-end-pages) - [Add disclaimers to sensitive content](https://frontendchecklist.io/rules/seo/disclaimers) - [Avoid duplicate meta descriptions](https://frontendchecklist.io/rules/seo/duplicate-description) - [Publish an editorial policy page](https://frontendchecklist.io/rules/seo/editorial-policy) - [Add relevant external links](https://frontendchecklist.io/rules/seo/external-links) - [Add FAQPage schema markup](https://frontendchecklist.io/rules/seo/faq) - [Add a favicon to every page](https://frontendchecklist.io/rules/seo/favicon) - [Show content freshness signals](https://frontendchecklist.io/rules/seo/freshness) - [Geo Meta Tags](https://frontendchecklist.io/rules/seo/geo-meta) - [Use a single descriptive H1](https://frontendchecklist.io/rules/seo/h1) - [Keep HTML documents under crawl limits](https://frontendchecklist.io/rules/seo/html-size) - [Do not link from HTTPS to HTTP](https://frontendchecklist.io/rules/seo/https-downgrade) - [Use hyphens in URLs](https://frontendchecklist.io/rules/seo/hyphens) - [Avoid conflicting indexability signals](https://frontendchecklist.io/rules/seo/indexability-conflicts) - [Make important pages indexable](https://frontendchecklist.io/rules/seo/indexability) - [Add internal links to key pages](https://frontendchecklist.io/rules/seo/internal-links) - [Fix invalid links](https://frontendchecklist.io/rules/seo/invalid-links) - [Use valid JSON-LD structured data](https://frontendchecklist.io/rules/seo/json-ld-valid) - [Avoid keyword stuffing](https://frontendchecklist.io/rules/seo/keyword-stuffing) - [Keep URLs concise](https://frontendchecklist.io/rules/seo/length) - [Make content easy for LLMs to parse](https://frontendchecklist.io/rules/seo/llm-parsability) - [Publish llms.txt for documentation-heavy sites](https://frontendchecklist.io/rules/seo/llms-txt) - [Add LocalBusiness schema markup](https://frontendchecklist.io/rules/seo/local-business) - [Use lowercase URLs](https://frontendchecklist.io/rules/seo/lowercase) - [MIME Type Validation](https://frontendchecklist.io/rules/seo/mime-type) - [Keep NAP details consistent](https://frontendchecklist.io/rules/seo/nap-consistency) - [Avoid nofollow on internal links](https://frontendchecklist.io/rules/seo/nofollow-internal) - [Avoid nosnippet on important pages](https://frontendchecklist.io/rules/seo/nosnippet) - [OG Image Size](https://frontendchecklist.io/rules/seo/og-image-size) - [Open Graph Tags](https://frontendchecklist.io/rules/seo/og-tags) - [OG URL Match](https://frontendchecklist.io/rules/seo/og-url-match) - [Add Organization schema markup](https://frontendchecklist.io/rules/seo/organization) - [Add internal links to orphan pages](https://frontendchecklist.io/rules/seo/orphan-pages) - [Use canonicals on paginated pages](https://frontendchecklist.io/rules/seo/pagination) - [Limit unnecessary URL parameters](https://frontendchecklist.io/rules/seo/parameters) - [Keep linked PDFs under 60 MB](https://frontendchecklist.io/rules/seo/pdf-size) - [Display a physical business address](https://frontendchecklist.io/rules/seo/physical-address) - [Add Product schema markup](https://frontendchecklist.io/rules/seo/product) - [Write at a clear reading level](https://frontendchecklist.io/rules/seo/reading-level) - [Link directly to final destination URLs](https://frontendchecklist.io/rules/seo/redirect-chains) - [Add Review schema markup](https://frontendchecklist.io/rules/seo/review) - [Service Area Pages](https://frontendchecklist.io/rules/seo/service-area) - [Include indexable pages in your sitemap](https://frontendchecklist.io/rules/seo/sitemap-coverage) - [Keep sitemap URLs on the correct domain](https://frontendchecklist.io/rules/seo/sitemap-domain) - [Include keywords in URL slugs](https://frontendchecklist.io/rules/seo/slug-keywords) - [URL Special Characters](https://frontendchecklist.io/rules/seo/special-chars) - [Tel & Mailto Links](https://frontendchecklist.io/rules/seo/tel-mailto) - [Use trailing slashes consistently](https://frontendchecklist.io/rules/seo/trailing-slash) - [Show trust signals on key pages](https://frontendchecklist.io/rules/seo/trust-signals) - [Add Twitter Card meta tags](https://frontendchecklist.io/rules/seo/twitter-cards) - [Add VideoObject schema to video pages](https://frontendchecklist.io/rules/seo/video) - [Weak Internal Links](https://frontendchecklist.io/rules/seo/weak-internal-links) - [Avoid thin content on key pages](https://frontendchecklist.io/rules/seo/word-count) - [Add share buttons to content pages](https://frontendchecklist.io/rules/seo/share-buttons) - [Link to active social profiles](https://frontendchecklist.io/rules/seo/social-profiles) - [URL Stop Words](https://frontendchecklist.io/rules/seo/stop-words) - [WebSite Search Schema](https://frontendchecklist.io/rules/seo/website-search) ### Testing - [Include accessibility testing](https://frontendchecklist.io/rules/testing/accessibility-testing) [high] - [Test across all major browsers](https://frontendchecklist.io/rules/testing/cross-browser-testing) [high] - [Implement end-to-end testing](https://frontendchecklist.io/rules/testing/e2e-testing) [high] - [Integrate real-time error monitoring in production](https://frontendchecklist.io/rules/testing/error-monitoring) [high] - [Write integration tests for key workflows](https://frontendchecklist.io/rules/testing/integration-testing) [high] - [Test on real mobile devices and viewports](https://frontendchecklist.io/rules/testing/mobile-testing) [high] - [Write unit tests](https://frontendchecklist.io/rules/testing/unit-tests) [high] - [Implement consumer-driven contract testing for API boundaries](https://frontendchecklist.io/rules/testing/contract-testing) - [Follow mocking best practices](https://frontendchecklist.io/rules/testing/mock-best-practices) - [Use mutation testing to measure how well tests detect bugs](https://frontendchecklist.io/rules/testing/mutation-testing) - [Enforce performance budgets in CI](https://frontendchecklist.io/rules/testing/performance-budget) - [Maintain test coverage thresholds](https://frontendchecklist.io/rules/testing/test-coverage) - [Use visual regression testing](https://frontendchecklist.io/rules/testing/visual-regression) --- For full rule content including descriptions, AI prompts, and automation guidance: https://frontendchecklist.io/llms-full.txt