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.)