Website Optimization Measures, Part XXXV
Published on JanĀ 21, 2026, filed under development, optimization. (Share this post, e.g. on Mastodon or onĀ Bluesky.)
Welcome to the thirty-fifth edition of this blog series in which I share improvements and lessons from the work on my projects, so that you can pick what could benefit yours:
Refactoring use of
rel=tag. When linking tags, Iāve usually marked them withrel=tag. Noting the immense repetition on Frontend Dogmaāa tag-heavy siteā, I had another look at the HTML spec. This says,rel=tagāgives a tag (identified by the given address) that applies to the current document.ā This means that links to tags that (āthatā meaning the links) are on overview pages should not be markedrel=tag. Accordingly, Iāve limited my use ofrel=tagin what ended up being a little performance optimization step.Trying Basecoat on top of Tailwind. āOh no,ā you yell at meāand yet I discarded the draft in which I laid out my experience.
Simplifying Eleventy passthrough configs. I hadnāt realized that I didnāt need multiple
eleventyConfig.addPassthroughCopy()calls, and simplified things in a manner like this:eleventyConfig.addPassthroughCopy({ 'dynamic/': '/tools/', 'media/': '/media/', 'root/': '/', 'setup/': '/setup/', });Removing quotesĀ š¬ Oh that meiert.com redesign and migration that I first planned in 2009 and finally did in 2025 (some context)Ā š Iām still dealing with some fallout, clean-up tasks Iām working on every other week. One such task: Removing quotes where not needed, notably on many hyperlinks (i.e.,
<a href=/example>ā¦</a>instead of<a href="/example">ā¦</a>). I write about optional HTMLāentire booksāand I walk the talkĀ šReplacing
asyncAllbyforloops. For some reasonāsuspected benefit?āI usedasyncAllloops in my Frontend Dogma Eleventy project. This came up as unnecessary, which I could confirm:In Nunjucks,
asyncAllandasyncEachexist to allow concurrent evaluation when the loop body uses asynchronous filters/shortcodes (e.g., filters that return a Promise or call back asynchronously).If the loop body is entirely synchronous,
asyncAllprovides no benefit and adds small overhead.I replaced these with
forloops, until I noticed that in one place, I did need it. Okay.Checking links⦠and taking the time to configure markdown-link-check. Link-checking is still that annoying but important task of ours. For my Markdown-based projects, I like using markdown-link-check. One thing I missed: Configuring it fully, at least for my purposes. These contents of a config file (passed on per
-cparameter) help me create better results in my environment:{ "ignorePatterns": [ { "pattern": "^/" }, { "pattern": "^#" }, { "pattern": "^mailto:" } ], "retryOn429": true, "retryCount": 3, "showProgressBar": true }Refactoring Markdown code blocks. Some day, I noticed some odd inconsistency for how commands were marked up (down?) in Markdown files:
```bash command_x ``` ```shell command_y ```Clearly, this couldnāt be š After searching a bit around,
shellfelt more appropriate to me, not seeming to limit the commands to Bash and hence leaving the specific shell open. (Do I miss something? Let me know!)Automatically checking on updates to GitHub Actions. It took me until seeing a Dependabot PR for a GitHub Actions update in the validator repo to notice that thereās a way to automatically update GitHub workflows as well. As these updates donāt seem to happen frequently, I included the following in my dependabot.yml:
- package-ecosystem: "github-actions" directory: "/" schedule: interval: "monthly"āStandardizingā Markdown indentation. Do you know with how many different numbers of spaces you can indent what list type processed by what tool? After noticing inconsistencies around how Markdown lists were indented in my projects, I started testing what worked in Leanpub and in my Eleventy projects, and⦠slid down some rabbit hole. The long story short: I defined how I wanted to indent within unordered and ordered list, and made the necessary changes. Maybe Iāll document my findings, given that there were some interesting/frustrating inconsistencies when list content started with markup.
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 senior engineering lead, guerrilla philosopher, and indie publisher. Iāve worked as a technical lead and engineering manager for companies you use every day and companies youāve never heard of, 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 philosophy. Here on meiert.com I share some of my experiences and perspectives. (I value you being critical, interpreting charitably, and giving feedback.)
