A MkDocs plugin that validates URLs, including anchors, in rendered html files.
- Prerequisites
- Python >= 3.8
- MkDocs >= 1.4.0
- Install the package with pip:
pip install mkdocs-htmlproofer-plugin- Enable the plugin in your
mkdocs.yml:
Note: If you have no
pluginsentry in your config file yet, you'll likely also want to add thesearchplugin. MkDocs enables it by default if there is nopluginsentry set, but now you have to enable it explicitly.
plugins:
- search
- htmlprooferTrue by default, allows toggling whether the plugin is enabled. Useful for local development where you may want faster build times.
plugins:
- htmlproofer:
enabled: !ENV [ENABLED_HTMLPROOFER, True]Which enables you do disable the plugin locally using:
export ENABLED_HTMLPROOFER=false
mkdocs serveOptionally, you may raise an error and fail the build on first bad url status. Takes precedense over raise_error_after_finish.
plugins:
- htmlproofer:
raise_error: TrueOptionally, you may want to raise an error and fail the build on at least one bad url status after all links have been checked.
plugins:
- htmlproofer:
raise_error_after_finish: TrueWhen specifying raise_error: True or raise_error_after_finish: True, it is possible to ignore errors
for combinations of URLs and status codes with raise_error_excludes. Each URL supports unix style wildcards *, [], ?, etc.
plugins:
- search
- htmlproofer:
raise_error: True
raise_error_excludes:
504: ['https://www.mkdocs.org/']
404: ['https://github.com/manuzhang/*']
400: ['*']Avoid validating the given list of URLs by ignoring them altogether. Each URL in the
list supports unix style wildcards *, [], ?, etc.
Unlike raise_error_excludes, ignored URLs will not be fetched at all.
plugins:
- search
- htmlproofer:
raise_error: True
ignore_urls:
- https://github.com/myprivateorg/*
- https://app.dynamic-service-of-some-kind.io*Log a warning when ignoring URLs with ignore_urls option. Defaults to false (no warning).
plugins:
- search
- htmlproofer:
raise_error: True
ignore_urls:
- https://github.com/myprivateorg/*
- https://app.dynamic-service-of-some-kind.io*
warn_on_ignored_urls: trueAvoid validating the URLs on the given list of markdown pages by ignoring them altogether.
Each page in the list supports unix style wildcards *, [], ?, etc.
plugins:
- search
- htmlproofer:
raise_error: True
ignore_pages:
- path/to/file
- path/to/folder/*Avoids validating any external URLs (i.e those starting with http:// or https://). This will be faster if you just want to validate local anchors, as it does not make any network requests.
plugins:
- htmlproofer:
validate_external_urls: FalseValidates the entire rendered template for each page - including the navigation, header, footer, etc. This defaults to off because it is much slower and often redundant to repeat for every single page.
plugins:
- htmlproofer:
validate_rendered_template: TrueOptionally skip downloading of a remote URLs content via GET request. This can considerably reduce the time taken to validate URLs.
plugins:
- htmlproofer:
skip_downloads: TrueIf you need to manually specify anchors make use of the attr_list extension in the markdown.
This can be useful for multilingual documentation to keep anchors as language neutral permalinks in all languages.
- A sample for a heading
# Grüße {#greetings}(the slugified generated anchorGreis overwritten withgreetings). - This also works for images
this is a nice image [](foo-bar.png){#nice-image} - And generall for paragraphs:
Listing: This is noteworthy.
{#paragraphanchor}More information about plugins in the MkDocs documentation
This work is based on the mkdocs-markdownextradata-plugin project and the Finding and Fixing Website Link Rot with Python, BeautifulSoup and Requests article.