Htmltest
:white_check_mark: Test generated HTML for problems
Install / Use
/learn @wjdp/HtmltestREADME
:white_check_mark: htmltest
If you generate HTML files, html-proofer might be the tool for you. If you can't be bothered with a Ruby environment or fancy something a bit faster, htmltest may be a better option.
:mag: htmltest runs your HTML output through a series of checks to ensure all your links, images, scripts references work, your alt tags are filled in, et cetera.
:horse_racing: Faster? Yep, quite a bit actually. On a site with over 2000 files htmlproofer took over three minutes, htmltest took 8.6 seconds. Both tools had full valid caches.
:confused: Why make another tool: A mix of frustration with using htmlproofer/Ruby on large sites and needing a good project to get to grips with Go.
:floppy_disk: Installation
:penguin: Linux / :green_apple: macOS
This godownloader script will query GitHub for the latest release and download the correct binary for your platform into the directory set with the -b flag.
System-wide Install
curl https://htmltest.wjdp.uk | sudo bash -s -- -b /usr/local/bin
You'll be prompted for your password. After simply do htmltest to run.
Into Current Directory
curl https://htmltest.wjdp.uk | bash
By default this will install htmltest into ./bin of your current directory, to run do bin/htmltest. Rather suitable for CI environments.
More options
Run curl https://htmltest.wjdp.uk | bash -s -- -h for help text.
📦 Package Repos
We're available in some package repositories such as Homebrew and repos for certain distros. Do note the version available may not be the latest.
Windows
:arrow_down: Download the latest binary release and put it somewhere on your PATH.
:whale: Docker
docker run -v $(pwd):/test --rm wjdp/htmltest
Mount your directory with html files into the container and test them.
If you need more arguments to the test run it like this:
docker run -v $(pwd):/test --rm wjdp/htmltest -l 3 -s
🧾 Temporary Files
We store temporary files in tmp/.htmltest by default. This contains a log of output and a cache of external links, speeding up subsequent runs. You probably want to ignore it in version control, and perhaps cache it in your CI system.
:computer: Usage
htmltest - Test generated HTML for problems
https://github.com/wjdp/htmltest
Usage:
htmltest [options] [<path>]
htmltest -v --version
htmltest -h --help
Options:
<path> Path to directory or file to test, if omitted we
attempt to read from .htmltest.yml.
-c FILE, --conf FILE Custom path to config file.
-h, --help Show this text.
-l LEVEL, --log-level LEVEL Logging level, 0-3: debug, info, warning, error.
-s, --skip-external Skip external link checks, may shorten execution
time considerably.
-v, --version Show version and build time.
:microscope: What's Tested?
Many options of the following tests can customised. Items marked :soon: are not checked yet, but will be soon.
alinkimgscript: Whether internal links work / are valid.a: Whether internal hashes work.alinkimgscript: Whether external links work.a: :soon: Whether external hashes work.alink: Whether external links use HTTPS.img: Whether your images have valid alt attributes.link: Whether pages have a valid favicon.meta: Whether refresh tags are valid and the url works.meta: :soon: Whether images and URLs in the OpenGraph metadata are valid.metatitle: :soon: Whether you've got the recommended tags in your head.DOCTYPE: Whether a doctype is correctly specified.
What's Not
I'd like to test the following but won't be for a while.
- Whether your HTML markup is valid. htmlproofer has the ruby library Nokogiri, I've not found one for Go yet.
:see_no_evil: Ignoring content
Add the data-proofer-ignore attribute to any tag or to the class of a tag to ignore it from every check. The name of this attribute can be customised.
<a href="http://notareallink" data-proofer-ignore>Not checked.</a>
:bookmark_tabs: Caching
Checking external URLs can slow tests down and potentially annoy the URL's host. htmltest caches the status code of checked external URLs and stores this cache between runs. We write the cache to tmp/.htmltest/refcache.json and expire items after two weeks by default.
:rainbow: Colour Output
By default, output in the TTY uses colours to indicate warnings, errors, and success. To turn off colourization, set an environment variable named NO_COLOR. If it is present, no colour will be used. The value is ignored. (See no-color.org.)
:fax: Logging
If you've got a lot of errors, reading them off a TTY may be difficult. We write errors to tmp/.htmltest/htmltest.log by default. The log level is set in the config file.
:wrench: Configuration
htmltest uses a YAML configuration file. Put .htmltest.yml in the same directory that you're running the tool from and you can just say htmltest to run your tests. You'll probably also want to cache the tmp/.htmltest directory.
Basic Options
| Option | Description | Default |
| :----- |:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| :------ |
| DirectoryPath | Directory to scan for HTML files. | |
| DirectoryIndex | The file to look for when linking to a directory. | index.html |
| FilePath | Single file to test within DirectoryPath, omit to test all. | |
| FileExtension | Extension of your HTML documents, includes the dot. If FilePath is set we use the extension from that. | .html |
| CheckDoctype | Enables checking the document type declaration. | true |
| CheckAnchors | Enables checking <a… tags. | true |
| CheckLinks | Enables checking <link… tags. | true |
| CheckImages | Enables checking <img… tags | true |
| CheckScripts | Enables checking <script… tags. | true |
| CheckMeta | Enables checking <meta… tags. | true |
| CheckGeneric | Enables other tags, see items marked with checkGeneric on the tags wiki page. | true |
| CheckExternal | Enables external reference checking; all tag types. | true |
| CheckInternal | Enables internal reference checking; all tag types. When disabled will prevent internal hash checking unless the reference only contains a hash fragment (#heading) and therefore refers to the current page. | true |
| CheckInternalHash | Enables internal hash/fragment checking.
Related Skills
node-connect
351.8kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
xurl
351.8kA CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.
frontend-design
110.9kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
351.8kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
