Skip to main content
Frontend Checklist
March 15, 2026

Landing Website โ€” Frontend Checklist & TODO

Based on Front-End Checklist, Front-End Performance Checklist, and Hugo Best Practices.

Priority: ๐Ÿ”ด High ยท ๐ŸŸก Medium ยท ๐ŸŸข Low


1. HEAD & Meta Tags

  • Doctype ๐Ÿ”ด โ€” HTML5 doctype is present at the top of all pages
  • Charset ๐Ÿ”ด โ€” UTF-8 declared as the first meta tag in <head>
  • Viewport ๐Ÿ”ด โ€” width=device-width, initial-scale=1 is set
  • Viewport viewport-fit ๐ŸŸข โ€” Add viewport-fit=cover for notched devices: <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
  • Title ๐Ÿ”ด โ€” Every page has a unique, descriptive <title> (< 55 characters)
  • Meta description ๐Ÿ”ด โ€” Per-page descriptions provided (< 150 characters)
  • keywords meta tag ๐ŸŸก โ€” Either populated dynamically from tags/categories or removed entirely (Google ignores it, but an empty tag looks unprofessional)
  • Canonical URL ๐Ÿ”ด โ€” <link rel="canonical"> present to avoid duplicate content
  • Language attribute ๐Ÿ”ด โ€” <html lang="..."> set correctly for the page language
  • Alternate hreflang ๐ŸŸข โ€” Hreflang tags present for all translations
  • x-default hreflang ๐ŸŸก โ€” <link rel="alternate" hreflang="x-default" href="..." /> present for international landing page fallback (Google recommendation)
  • twitter:card meta tag ๐ŸŸก โ€” twitter:card type declared (e.g., summary_large_image). Required for Twitter/X preview cards
  • Open Graph tags ๐ŸŸก โ€” og:type, og:title, og:description, og:image, og:url, og:locale, og:site_name present
  • og:image:width and og:image:height ๐ŸŸข โ€” Dimensions specified so crawlers render immediately without downloading
  • CSS before JS ๐Ÿ”ด โ€” All CSS <link> tags loaded before any <script> tags in <head>

2. Favicons & Web App Manifest

  • Favicon files ๐ŸŸก โ€” All required sizes present (16x16, 32x32, 192x192, 512x512, apple-touch-icon, favicon.ico)
  • Web manifest ๐ŸŸก โ€” site.webmanifest exists and is linked
  • Manifest name and short_name ๐Ÿ”ด โ€” Both fields populated with the site name (required for PWA install prompts and bookmarking)
  • Theme color ๐ŸŸข โ€” <meta name="theme-color"> set to match brand

3. HTML Quality

  • Semantic HTML5 ๐Ÿ”ด โ€” Appropriate use of <header>, <footer>, <section>, <main>, <aside>, <nav>, <article>
  • 404 error page ๐Ÿ”ด โ€” Custom 404 page exists with inline CSS (no external stylesheet dependency)
  • 5xx error page ๐ŸŸก โ€” Custom 500 error page exists with inline CSS
  • No boilerplate/template remnants ๐Ÿ”ด โ€” All placeholder text, debug strings, and framework boilerplate removed from production templates
  • No dead code ๐ŸŸข โ€” Unused template blocks, variables, and commented-out code removed
  • noopener noreferrer on external links ๐Ÿ”ด โ€” All target="_blank" links include rel="noopener noreferrer" to prevent tab nabbing
  • <noscript> fallback ๐ŸŸก โ€” A minimal fallback message provided for users with JavaScript disabled
  • No unused source files ๐ŸŸข โ€” Unused SCSS/JS source files removed from the project
  • All strings internationalized ๐ŸŸก โ€” No hardcoded UI strings in templates; all user-facing text pulled from i18n files
  • W3C HTML validation ๐Ÿ”ด โ€” All pages pass W3C validator without errors
  • Broken link check ๐Ÿ”ด โ€” No broken internal or external links (use W3C Link Checker)
  • Clean production code ๐ŸŸข โ€” HTML comments and unnecessary whitespace removed in production output

4. CSS

  • CSS preprocessor ๐ŸŸข โ€” Using a CSS preprocessor (Sass/SCSS/Less) for maintainability
  • Autoprefixer ๐Ÿ”ด โ€” Vendor prefixes generated automatically via Autoprefixer or PostCSS
  • Minification ๐Ÿ”ด โ€” All CSS minified in production
  • Fingerprinting / cache busting ๐ŸŸก โ€” CSS filenames include content hash for cache invalidation
  • SRI (Subresource Integrity) ๐ŸŸก โ€” CSS <link> tags include integrity attribute
  • Single CSS bundle ๐Ÿ”ด โ€” All CSS concatenated into a single file (or minimal files for HTTP/2)
  • CSS Reset / Normalize ๐Ÿ”ด โ€” A CSS reset, normalize, or reboot is included and up to date
  • Unused CSS removed ๐ŸŸก โ€” Unused CSS selectors purged (via PurgeCSS or similar). Full framework imports trimmed to needed components
  • Critical CSS ๐ŸŸก โ€” Above-the-fold CSS inlined in <head> for faster First Contentful Paint (FCP)
  • font-display property ๐ŸŸก โ€” Web fonts (including icon fonts) use font-display: swap to prevent FOIT (Flash of Invisible Text)
  • No inline CSS in <body> ๐Ÿ”ด โ€” All styles in external files or <head> (except critical CSS)
  • Unique IDs ๐Ÿ”ด โ€” All element IDs are unique per page
  • Responsive design ๐Ÿ”ด โ€” Tested at 320px, 768px, 1024px, 1440px breakpoints
  • Print stylesheet ๐ŸŸก โ€” Print-specific styles provided
  • CSS validation ๐ŸŸก โ€” CSS passes W3C CSS Validator
  • LTR/RTL support ๐ŸŸก โ€” If multilingual, tested for RTL languages

5. JavaScript

  • No inline JS in <body> ๐Ÿ”ด โ€” JavaScript code in external files, not mixed with HTML
  • Minification ๐Ÿ”ด โ€” All JS files minified in production
  • Fingerprinting / SRI ๐Ÿ”ด โ€” JS filenames hashed and integrity attribute present
  • Non-blocking loading ๐Ÿ”ด โ€” Scripts loaded with defer or async attribute
  • Bundled into minimal files ๐Ÿ”ด โ€” All JS concatenated/bundled to minimize HTTP requests
  • No javascript:void(0) ๐ŸŸก โ€” Using proper href="#" with event.preventDefault() or <button> elements instead
  • Updated libraries ๐ŸŸก โ€” All JS libraries are up to date with latest stable versions
  • Dependency size audit ๐ŸŸข โ€” External libraries are necessary and as lightweight as possible (consider Vanilla JS for simple features)
  • ESLint / linting ๐ŸŸก โ€” No errors flagged by a JS linter
  • No console.log in production ๐ŸŸข โ€” Debug logging removed from production builds

6. Images

  • Image optimization ๐Ÿ”ด โ€” All images compressed without visible quality loss (target: < 200 KB per image)
  • Modern formats ๐ŸŸก โ€” Using WebP (or AVIF) with fallbacks where appropriate
  • No duplicate format files ๐ŸŸข โ€” If multiple formats exist for the same image, implement <picture> with fallback or remove unused formats
  • SVG optimization ๐ŸŸก โ€” Large SVG files optimized with SVGO
  • loading="lazy" ๐ŸŸก โ€” Below-the-fold images use native lazy loading
  • Descriptive alt text ๐Ÿ”ด โ€” All <img> tags have meaningful, descriptive alt text (not just the brand name)
  • width and height attributes ๐ŸŸก โ€” Dimensions specified on images to prevent Cumulative Layout Shift (CLS)
  • Responsive images ๐ŸŸก โ€” Using srcset and <picture> to serve appropriately sized images per viewport
  • Hugo image processing ๐ŸŸก โ€” Using Hugo’s built-in .Resize / .Fit / .Fill for serving optimally sized images (Hugo-specific)
  • No oversized images in content ๐Ÿ”ด โ€” Blog/content images are appropriately sized (not raw camera/design exports)

7. Video & Media

  • Video hosting strategy ๐Ÿ”ด โ€” Large videos hosted on CDN or streaming platform (YouTube/Vimeo) rather than self-hosted in static/
  • Video compression ๐ŸŸก โ€” Self-hosted videos compressed with modern codecs (H.265/VP9), with WebM fallback
  • preload optimization ๐ŸŸก โ€” Videos not auto-loaded use preload="none" or preload="metadata" to save bandwidth
  • Video file size ๐Ÿ”ด โ€” Self-hosted video files kept under 5 MB each where possible

8. Performance

  • Resource hints ๐ŸŸก โ€” <link rel="preconnect"> and/or <link rel="dns-prefetch"> added for critical external domains (analytics, CDN, API)
  • Page weight < 1.5 MB ๐Ÿ”ด โ€” Initial page load (HTML + CSS + JS + images) kept under 1.5 MB, ideally under 500 KB
  • Page load time < 3 seconds ๐Ÿ”ด โ€” Full page load under 3 seconds on 3G connection
  • TTFB < 1.3 seconds ๐Ÿ”ด โ€” Time To First Byte under 1.3 seconds
  • HTML minification ๐ŸŸก โ€” Hugo minify config enabled:
    1
    2
    3
    
    minify:
      disableXML: true
      minifyOutput: true
  • Gzip/Brotli compression ๐Ÿ”ด โ€” Server delivers compressed responses (verify with curl -H "Accept-Encoding: gzip" -I)
  • HTTP cache headers ๐ŸŸก โ€” Static assets have appropriate Cache-Control headers
  • Google PageSpeed score โ‰ฅ 90 ๐Ÿ”ด โ€” PageSpeed Insights score โ‰ฅ 90 on both mobile and desktop
  • Core Web Vitals ๐Ÿ”ด โ€” LCP, INP, and CLS metrics within “Good” thresholds
  • Cookie size ๐ŸŸก โ€” Each cookie under 4096 bytes; domain has fewer than 20 cookies
  • Minimal HTTP requests ๐Ÿ”ด โ€” Every requested file is essential; no unnecessary requests
  • CDN ๐ŸŸก โ€” Static assets served from a CDN for global performance
  • Same-protocol assets ๐Ÿ”ด โ€” All assets served over HTTPS; no mixed content

9. SEO

  • Sitemap ๐Ÿ”ด โ€” sitemap.xml generated and submitted to Google Search Console
  • robots.txt ๐Ÿ”ด โ€” robots.txt present and not blocking important pages
  • robots.txt environment check ๐ŸŸก โ€” Verify that production environment variables are set so robots.txt allows crawling (not Disallow: /)
  • enableRobotsTXT in Hugo config ๐ŸŸก โ€” Enabled in config.yaml so Hugo uses the custom robots.txt template
  • Structured data (JSON-LD) ๐Ÿ”ด โ€” Schema.org markup present and validated with Rich Results Test
  • Schema.org accuracy ๐ŸŸก โ€” Author names, sameAs URLs, and image references in JSON-LD are correct (not empty or placeholder values)
  • Sitemap configuration ๐ŸŸก โ€” Hugo sitemap config set with changefreq and priority:
    1
    2
    3
    
    sitemap:
      changefreq: weekly
      priority: 0.5
  • Heading hierarchy ๐ŸŸก โ€” Proper heading order (single <h1> per page, <h2> โ†’ <h3> โ†’ etc.) without skipping levels
  • HTML sitemap ๐ŸŸก โ€” An HTML sitemap page is accessible via the footer
  • Google Analytics / Search Console ๐ŸŸข โ€” Analytics installed and Search Console configured

10. Accessibility (a11y)

  • Skip navigation link ๐Ÿ”ด โ€” “Skip to main content” link at the top of the page:
    1
    
    <a href="#content" class="visually-hidden-focusable">Skip to main content</a>
  • Focus styles ๐Ÿ”ด โ€” :focus outlines visible on all interactive elements; not suppressed by custom CSS
  • Color contrast ๐ŸŸก โ€” All text/background combinations pass WCAG AA contrast ratio (4.5:1 for normal text, 3:1 for large text)
  • ARIA labels on icon-only links ๐ŸŸก โ€” Links/buttons using only icons have aria-label for screen readers
  • Keyboard navigation ๐Ÿ”ด โ€” All interactive elements (nav, modals, forms, buttons) reachable and operable with keyboard only
  • Screen reader testing ๐ŸŸก โ€” Pages tested with at least one screen reader (VoiceOver, NVDA, ChromeVox)
  • Form labels ๐Ÿ”ด โ€” All form inputs have associated <label> elements or aria-label
  • Heading structure ๐Ÿ”ด โ€” Headings used in proper order for document outline (not for visual styling)
  • WAVE / axe audit ๐ŸŸก โ€” Automated accessibility testing passed with WAVE or axe
  • Progressive enhancement ๐ŸŸก โ€” Core functionality (navigation, content) works without JavaScript

11. Security

  • HTTPS everywhere ๐Ÿ”ด โ€” All pages and assets served over HTTPS
  • SRI (Subresource Integrity) ๐ŸŸก โ€” External/CDN CSS and JS include integrity and crossorigin attributes
  • noopener noreferrer ๐Ÿ”ด โ€” All target="_blank" links include rel="noopener noreferrer"
  • Content Security Policy (CSP) ๐ŸŸก โ€” CSP headers configured to restrict resource loading sources
  • HSTS header ๐ŸŸก โ€” Strict-Transport-Security header set with max-age โ‰ฅ 31536000
  • X-Content-Type-Options ๐ŸŸข โ€” nosniff header set to prevent MIME-type sniffing
  • X-Frame-Options ๐ŸŸข โ€” DENY or SAMEORIGIN header set to prevent clickjacking
  • Security headers audit ๐ŸŸก โ€” Scan with securityheaders.com and Mozilla Observatory

12. Hugo-Specific Best Practices

  • Content archetypes ๐ŸŸก โ€” Archetypes defined for each content type (blog, page, etc.) with pre-filled front matter:
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    # archetypes/blog.md
    ---
    title: "{{ replace .Name "-" " " | title }}"
    description: ""
    date: {{ .Date }}
    draft: true
    archived: false
    toc: true
    tags: []
    ---
  • canonifyURLs ๐ŸŸก โ€” Consider enabling canonifyURLs: true in config for consistent URL handling
  • External link render hook ๐ŸŸก โ€” Custom render-link.html in layouts/_default/_markup/ to add target="_blank" rel="noopener noreferrer" to external links in markdown content
  • Content for all configured languages ๐ŸŸก โ€” All languages in config have corresponding content directories, or unused languages are disabled
  • .gitignore coverage ๐ŸŸข โ€” Build artifacts ignored: public/, resources/, node_modules/, generated JS/CSS in assets/
  • Content organization ๐ŸŸข โ€” Images stored alongside their markdown files (page bundles), not in a separate global folder
  • Hugo Pipes for assets ๐ŸŸก โ€” Using resources.Minify, resources.Fingerprint, and resources.Concat for CSS/JS processing
  • Conditional asset loading ๐ŸŸข โ€” Page-specific scripts and styles wrapped in Hugo conditionals to avoid loading on every page

13. Build & CI/CD

  • Pinned CI image ๐Ÿ”ด โ€” CI container uses a specific version (e.g., node:20-alpine), not latest
  • Hugo binary available in CI ๐ŸŸก โ€” Hugo is correctly installed/available in the CI build environment
  • Production environment variables ๐ŸŸก โ€” HUGO_ENV=production (or equivalent) set in CI so that:
    • robots.txt allows crawling
    • Analytics scripts are activated
    • Minification/optimization is enabled
  • Build size monitoring ๐ŸŸข โ€” Bundle size tracked and checked on each build (consider size-limit or similar)
  • Build reproducibility ๐ŸŸก โ€” package-lock.json committed and npm ci used instead of npm install in CI

14. Fonts & Typography

  • WOFF2 format ๐Ÿ”ด โ€” Web fonts served in WOFF2 format (with WOFF fallback for older browsers)
  • Webfont total size < 300 KB ๐ŸŸก โ€” All font files (including icon fonts) combined under 300 KB
  • font-display: swap ๐ŸŸก โ€” All @font-face declarations include font-display: swap
  • Preconnect for font CDN ๐ŸŸก โ€” If using Google Fonts or similar: <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  • System font stack considered ๐ŸŸข โ€” Evaluated whether a system font stack is sufficient vs. custom web fonts (better performance)
  • Icon font audit ๐ŸŸข โ€” If using an icon font, verify full font is needed; consider inline SVG for a small number of icons

15. Pre-Launch Summary Checklist

#ItemStatus
1Web manifest has valid name/short_nameโฌœ
2No boilerplate/placeholder text in templatesโฌœ
3rel="noopener noreferrer" on all external linksโฌœ
4All images optimized (< 200 KB each)โฌœ
5Videos compressed or externally hostedโฌœ
6Skip navigation link presentโฌœ
7CI uses pinned image versionโฌœ
8Production env variables set in CIโฌœ
9Core Web Vitals in “Good” rangeโฌœ
10robots.txt allows crawling in productionโฌœ
11PageSpeed score โ‰ฅ 90 (mobile + desktop)โฌœ
12Accessibility audit passed (WAVE/axe)โฌœ
13Structured data validated (Schema.org)โฌœ
14Security headers audit passedโฌœ
15All forms have labels and proper input typesโฌœ

References