Product Launch Checklist

A checklist used for all projects when going live

PRs Welcome Licence MIT

HTML • CSS • Fonts • Images • JavaScript • Server • SEO & Services • Contributing

--- ## HTML ![html] - [ ] **Minified HTML:** ![medium] The HTML code is minified, comments, white spaces and new lines are removed from production files. - [ ] **Remove unnecessary comments:** ![low] Ensure that comments are removed from your pages. - [ ] **Remove unnecessary attributes:** ![low] Type attributes like `type="text/javascript"` or `type="text/css"` are not required anymore and should be removed. ```html ``` - [ ] **Favicon present:** ![high] Does Favicon load? Pin the tab in Safari to check pinned icon * 🛠 [Real Favicon Generator](https://realfavicongenerator.net) - [ ] **Meta Title / Description Available:** ![high] Check page titles / descriptions - [ ] **Social Tags Present:** ![high] Test Facebook sharing. Provide og-tags if needed * 🛠 [HEY META - Website Meta Tag Check](http://www.heymeta.com/) **[⬆ back to top](#table-of-contents)** ## CSS ![css] - [ ] **Minification:** ![high] All CSS files are minified, comments, white spaces and new lines are removed from production files. * 🛠 [cssnano: A modular minifier based on the PostCSS ecosystem.](https://cssnano.co/) - [ ] **Concatenation:** ![medium] CSS files are concatenated in a single file *(Not always valid for HTTP/2)*. ```html ``` - [ ] **Non-blocking:** ![high] CSS files need to be non-blocking to prevent the DOM from taking time to load. ```html ``` > ⁃ You need to add the `rel` attribute with the `preload` value and add `as="style"` on the `` element. * 🛠 [preload-webpack-plugin](https://github.com/GoogleChromeLabs/preload-webpack-plugin) - [ ] **Unused CSS:** ![medium] Remove unused CSS selectors. * 🛠 [PurifyCSS](https://github.com/purifycss/purifycss) * 🛠 [PurgeCSS](https://github.com/FullHuman/purgecss) **[⬆ back to top](#table-of-contents)** ## Fonts ![fonts] * 📖 [A Book Apart, Webfont Handbook](https://abookapart.com/products/webfont-handbook) - [ ] **Webfont formats:** ![medium] You are using WOFF2 on your web project or application. - [ ] **Use `preconnect` to load your fonts faster:** ![medium] ```html ``` > ⁃ Before prefetching your webfonts, use webpagetest to evaluate your website
⁃ Look for teal colored DNS lookups and note the host that are being requested
⁃ Prefetch your webfonts in your `` and add eventually these hostnames that you should prefetch too * 📖 [Faster Google Fonts with Preconnect - CDN Planet](https://www.cdnplanet.com/blog/faster-google-webfonts-preconnect/) * 📖 [Make Your Site Faster with Preconnect Hints | Viget](https://www.viget.com/articles/make-your-site-faster-with-preconnect-hints/) * 📖 [Ultimate Guide to Browser Hints: Preload, Prefetch, and Preconnect - MachMetrics Speed Blog](https://www.machmetrics.com/speed-blog/guide-to-browser-hints-preload-preconnect-prefetch/) - [ ] **Webfont size:** ![medium] Webfont sizes don't exceed 300kb (all variants included) * 📖 [Font Bytes - Page Weight](https://httparchive.org/reports/page-weight#bytesFont) **[⬆ back to top](#table-of-contents)** ## JavaScript ![javascript] - [ ] **JS Minification:** ![high] All JavaScript files are minified, comments, white spaces and new lines are removed from production files *(still valid if using HTTP/2)*. * 🛠 [uglify-js - npm](https://www.npmjs.com/package/uglify-js) * [ ] **No JavaScript inside:** ![medium] *(Only valid for website)* Avoid having multiple JavaScript codes embedded in the middle of your body. Regroup your JavaScript code inside external files or eventually in the `` or at the end of your page (before ``). > Ensure that all your files are loaded using `async` or `defer` and decide wisely the code that you will need to inject in your ``. * 📖 [11 Tips to Optimize JavaScript and Improve Website Loading Speeds](https://www.upwork.com/hiring/development/11-tips-to-optimize-javascript-and-improve-website-loading-speeds/) * [ ] **Non-blocking JavaScript:** ![high] JavaScript files are loaded asynchronously using `async` or deferred using `defer` attribute. ```html ``` > ⁃ Add `async` (if the script don't rely on other scripts) or `defer` (if the script relies upon or relied upon by an async script) as an attribute to your script tag.
⁃ If you have small scripts, maybe use inline script place above async scripts. * 📖 [Remove Render-Blocking JavaScript](https://developers.google.com/speed/docs/insights/BlockingJS) * 📖 [Defer loading JavaScript](https://varvy.com/pagespeed/defer-loading-javascript.html) - [ ] **Check dependencies size limit:** ![low] Ensure to use wisely external libraries, most of the time, you can use a lighter library for a same functionality. - [ ] **JavaScript Profiling:** ![medium] Check for performance problems in your JavaScript files (and CSS too). - [ ] **Use of Service Workers:** ![medium] You are using Service Workers in your PWA to cache data or execute possible heavy tasks without impacting the user experience of your application. **[⬆ back to top](#table-of-contents)** ## Server ![server-side] - [ ] **Your website is using HTTPS:** ![high] - [ ] **Page weight < 1500 KB (ideally < 500 KB):** ![high] Reduce the size of your page + resources as much as you can. - [ ] **Page load times < 3 seconds:** ![high] Reduce as much as possible your page load times to quickly deliver your content to your users. > Use online tools like [Page Speed Insight](https://developers.google.com/speed/pagespeed/insights/) or [WebPageTest](https://www.webpagetest.org/) to analyze what could be slowing you down and use the Front-End Performance Checklist to improve your load times. - [ ] **Time To First Byte < 1.3 seconds:** ![high] Reduce as much as you can the time your browser waits before receiving data. * 📖 [What is Waiting (TTFB) in DevTools, and what to do about it](https://scaleyourcode.com/blog/article/27) - [ ] **Minimizing HTTP requests:** ![high] Always ensure that every file requested are essential for your website or application. - [ ] **Use a CDN to deliver your assets:** ![medium] Use a CDN to deliver faster your content over the world. - [ ] **Set HTTP cache headers properly:** ![high] Set HTTP headers to avoid expensive number of roundtrips between your browser and the server. * 📖 [Using cache-control for browser caching](https://varvy.com/pagespeed/cache-control.html) - [ ] **GZIP / Brotli compression is enabled:** ![high] Use a compression method such as Gzip or Brotli to reduce the size of your JavaScript files. With a smaller sizes file, users will be able to download the asset faster, resulting in improved performance. * 🛠 [Check GZIP compression](https://checkgzipcompression.com/) * 🛠 [Check Brotli Compression](https://tools.keycdn.com/brotli-test) * 📖 [Can I use... Brotli](https://caniuse.com/#feat=brotli)ssdxca **[⬆ back to top](#table-of-contents)** ## SEO & Services ![meta] - [ ] **Content Security:** ![low] Content Security Policy 101 * 📖 [Content Security Policy 101](https://christoph-rumpel.com/2018/03/content-security-policy-101) - [ ] **Robots.txt:** ![high] Verify robots.txt is present and allow's all robots - [ ] **Sitemap:** ![high] ensure that a sitemap is present and if the content is dynamic, proper functionality is there to auto update it - [ ] **Analytics:** ![high] Verify Tag Manager / Analytics have been correctly set up ### Cloudflare - [ ] ![high] Set CloudFlare and do that necessary configurations - [ ] **SSL/TLS:** - [ ] Your SSL/TLS encryption mode => Flexible - [ ] **SSL/TLS -> Edge Certificates:** - [ ] Always use HTTPS => YES - [ ] Automatic HTTPS Rewrites => YES - [ ] **Firewall -> Settings:** - [ ] Security Level => Essentially Off ### Google Search Console - [ ] ![low] Submit all www/non-www http/https variations - [ ] ![low] Set up one non-www/www https as the preferred domain - [ ] ![low] Crawl > Fetch as Google > Submit to index to kickstart index ### Bing Webmaster Tools - [ ] ![low] Submit the site to [Bing Webmaster](https://www.bing.com/webmaster/home/) OR Import from Google ### Backups - [ ] **Server:** ![medium] Are Server backups enabled? - [ ] **Database:** ![medium] Are Amazon S3 backups enabled for database? ### Github - [ ] **Branches Cleanup:** ![low] Remove `develop` branch or other stale branches - [ ] **Write a solid README:** ![medium] [How to write a README that rocks](https://m.dotdev.co/how-to-write-a-readme-that-rocks-bc29f279611a) ### Twitter - [ ] Finally, let the world know... **[⬆ back to top](#table-of-contents)** --- ## Contributing **Open an issue or a pull request to suggest changes or additions.** ## License [MIT](LICENSE) All icons are provided by [Icons8](https://icons8.com/) **[⬆ back to top](#table-of-contents)** [html]: images/html.png [css]: images/css.png [fonts]: images/fonts.png [images]: images/images.png [javascript]: images/javascript.png [server-side]: images/server-side.png [meta]: images/meta.png [low]: images/low.svg [medium]: images/medium.svg [high]: images/high.svg