Website Optimization Measures, Part XXXII
Published on Jun 25, 2025, filed under development, optimization (feed). (Share this on Mastodon or Bluesky?)
Hello to edition 32 of that series in which I share improvements and lessons from the work on my projects, allowing you to choose what may benefit yours:
Axing custom âInternal Server Errorâ pages. For ages I set up error pages for internal server errors (500). At some point I finally realized that these pages would never showâor, even if, not show correctly. After a quick search checking on this sentiment, I removed all custom pages I had set up for these errors.
One thing I kept, howeverââstandalone,â âinlineâ directives for these errors, that is, like the ones I shared in WOMÂ XXX.
Refactoring .eleventy.js configs. I reviewed all my Eleventy projectsâ configurations. Apart from reordering filters and collections, one larger benefit fell out of this optimization measure: I noticed that I used and needed the Eleventy RSS plugin only for its built-in
absoluteUrl
filter. I replaced it by a homemade filter:// Replace `absoluteUrl` formerly provided by RSS plugin eleventyConfig.addFilter('absoluteUrl', (url, base) => { return new URL(url, base).href; });
Tightening CSPs (and onboarding external assets). Over the years, I had whitelisted several domains in one of my projectsâ CSP. This I started to dislike so much that I searched for any such references, moved the respective assets (like images) to the respective domain (to host them from its CDN), and took that to remove exceptions from the content security policy. In other wordsâI moved to hotlinking and whitelisting less.
Removing
ls=1
parameters from Apple store links. These launch the respective apps, and while I liked this in the past, I donât do so anymore. (Besides, stripping them allowed me to remove the quotes around the links đ)Trying to improve Eleventy passthroughs. Passthroughs in Eleventy seem slow (even blocking?) to me. On meiert.com, I have particularly large folders to pass through, with the German version and images being two of them. Iâve hooked up rsync commands as Node scripts not to have Eleventy handle these folders⌠and Iâm monitoring.
Performing extra link checks. That most boring of important tasks again. I routinely run link checks over my projects, but after the meiert.com migration, whichâwith content originally stored in a databaseâhad many links in its wake that could never easily checked and updated, more checks were needed. With the English part of meiert.com now using Markdown, I handled this using markdown-link-check.
Ensuring alphabetical sorting of CSPs. Iâm a fan of alphabetical sorting because itâs easy for humans and machines. (I also sort CSS declarations alphabetically and recommend to do the same.) On adjusting one policy I noticed that most shockingly,
frame-ancestors
directives were not properly sorted. Adjusted, changed,âoptimized! đStarting to take action on links to organizations directly and indirectly tied to wars, genocides, misanthropy. With a clearer personal policy in place, part of my latest maintenance work has meant to remove attributions and switch to âarchivedâ links of parties that are based in countries engaging in wars, genocide, or misanthropy. Your and my country might not do enough against such crimesâletâs do more individually then. Everything helps.
This is a part of an open article series. Check out some of the other optimization posts!
About Me
Iâm Jens (long: Jens Oliver Meiert), and Iâm a web developer, manager, and author. Iâve been working as a technical lead and engineering manager for companies youâve never heard of and companies you use every day, Iâm an occasional contributor to web standards (like HTML, CSS, WCAG), and I write and review books for OâReilly and Frontend Dogma.
I love trying things, not only in web development and engineering management, but also in other areas like philosophy. Here on meiert.com I share some of my experiences and views. (I value you being critical, interpreting charitably, and giving feedback.)