Find Dead Links on Your Jekyll Blog with HTML Proofer
Introduction
HTML Proofer is a super handy ruby tool that helps you check your statically generated HTML for any inconsistencies. If you have a large statically generated site then it is certainly worth setting this up because as your site continues to grow it will become more and more difficult to audit the validity of your pages. I have used HTML Proofer in the past, but for whatever reason I had "disable_external" set to true which ignored all outgoing links. It is still useful to find things like missing alt tags in images, and general invalid HTML, but this feature makes it a must for all blogs.Configuration
Rather than clicking on every link on every page, let HTML Proofer do the heavy lifting for you with the following simple steps:Install HTML Proofer
Add the following to yourGemfile
gem "html-proofer" gem "rake"
bundle install
Configure a Rake Task
Add the following to yourRakefile
.
require 'html-proofer'task :test do sh “bundle exec jekyll build” HTMLProofer.check_directory("./_site", { :allow_hash_href => true }).run end
Run the Task
bundle exec rake test
* External link https://levlaz.org/tag/lxc/ failed: 404 No error - ./_site/projects/index.html * External link https://ezbadge.levlaz.org/ failed: 301 Peer certificate cannot be authenticated with given CA certificates - ./_site/salting-your-lxc-container-fleet/index.html * image /images/minions.jpg does not have an alt attribute (line 150) - ./_site/setting-up-antlr4-on-windows/index.html * image /images/antlr.png does not have an alt attribute (line 156) * image /images/grun.png does not have an alt attribute (line 163) - ./_site/share-this-on-facebook/index.html
Configure CI
If are using CircleCI you can add the following to yourcircle.yml
to run the proofer automatically.
test: override: - bundle exec rake test
Conclusion
There is nothing worse than clicking on a link and seeing a 404. When the post is from 2013, perhaps you can excuse it, but it is still a terrible experience for the user and as a "web master" you owe it to your users to prevent link rot.Thank you for reading! Share your thoughts with me on bluesky, mastodon, or via email.
Check out some more stuff to read down below.
Most popular posts this month
- 2024
- Reinstalling Windows at 1am
- SQLite DB Migrations with PRAGMA user_version
- My Custom Miniflux CSS Theme
- How to Disable Wayland in Debian Testing
Recent Favorite Blog Posts
This is a collection of the last 8 posts that I bookmarked.
- Give Your Spouse the Gift of a Couple's Email Domain from mtlynch.io
- Skip the Next iPhone from Articles on Jose M.
- Have smart glasses finally hit an inflection point? from The Torment Nexus
- The McPhee method from the jsomers.net blog
- Pluralistic: LLMs are slot-machines (16 Aug 2025) from Pluralistic: Daily links from Cory Doctorow
- Pluralistic: Bluesky creates the world's weirdest, hardest-to-understand binding arbitration clause (15 Aug 2025) from Pluralistic: Daily links from Cory Doctorow
- Just a Little More Context Bro, I Promise, and It’ll Fix Everything from Jim Nielsen’s Blog
- The Futzing Fraction from Deciphering Glyph
Articles from blogs I follow around the net
Give a Problem. Grow a Programmer.
In 2009, I kicked off my senior year in college with a class that ultimately changed the way I thought about my degree—and my future.
via flower.codes September 15, 2025Yala stablecoin depegs after theft
The YU bitcoin-backed stablecoin list its intended dollar peg after what they described as "an attempted attack", later writing that there was an "unauthorized transfer of funds". Although they initially wrote that …
via Web3 is Going Just Great September 15, 2025How big a solar battery do I need to store *all* my home's electricity?
I have a modest set of solar panels on an entirely ordinary house in suburban London. On average they generate about 3,800kWh per year. We also use about 3,800kWh of electricity each year. Obviously, we can't use all the power produced over summer an…
via Terence Eden’s Blog September 15, 2025Generated by openring