After noticing a broken link in a post yesterday, I got to thinking that it would be useful to add a linter to BlogMore. So I've released v2.21.0 which adds linting support.
A number of things are checked and the results are broken down into things that are errors or warnings. Errors result from any of these checks:
- Ensures all posts and pages have valid YAML frontmatter. If a file cannot be parsed, it is reported as an error.
- Scans the generated HTML for links to non-existent internal paths (other posts, pages, categories, tags, archives, site features like search, or files in
extras/). - Checks that all
<img>sources resolve to valid internal paths or files in theextras/directory. - Checks that the
coverproperty in a post or page frontmatter points to a valid resource. - Verifies that all page slugs listed in
sidebar_pagesactually exist. - Checks that all internal-looking URLs in the
links:andsocials:configuration settings point to valid targets.
On the other hand, the following just result in a warning:
- Flags if a post is missing a
title,category,tags, or adate. - Reports if a post's
dateormodifieddate is set in the future. - Notes if a post's
modifieddate is earlier than its original publicationdate. - Identifies if two or more posts share the exact same title.
- Flags inline images missing an
altattribute, or those with an empty/whitespace-onlyaltattribute. - If
clean_urlsis enabled, warns if internal links point explicitly toindex.html. - Reports internal links using the full
site_url(e.g.,https://example.com/path/) instead of a root-relative path (/path/).
I feel like all of these cover most of the things that are low-cost to detect but have a positive impact on the state of the content of a blog.
One thing I've not done is any sort of checking of external links. This would be costly and could possibly have unintended consequences that I don't want to be messing with (perhaps a tool to export the list of external links for checking could be useful, at some point).
Having run this against this blog, I did find some things that needed cleaning up, mostly absolute links that could be turned into root-relative links (always good for making the content portable).
I'm going to make this a standard part of my "I'm ready to publish" check for this blog, and it should also be helpful as I carry on migrating the images in the blog over to WebP.
