]> zackmdavis.net Git - An_Algorithmic_Lucidity.git/commitdiff
fix canonical URLs in Markdown alternatives
authorZack M. Davis <code@zackmdavis.net>
Wed, 22 Jul 2026 20:53:50 +0000 (13:53 -0700)
committerZack M. Davis <code@zackmdavis.net>
Wed, 22 Jul 2026 20:53:50 +0000 (13:53 -0700)
I wondered why the "Canonical URL" in the published Markdown
alternatives was relative. Sonnet 5 in Claude code found and fixed the
bug (which it had written in the first place). Don't confuse me for
being ungrateful.

pelicanconf.py

index 044025053b28ec6acb42b57d02da92a0bc456956..c8ef7c05337d1501ee9f1d33c2afe3cff7881b40 100644 (file)
@@ -111,11 +111,19 @@ EXTRA_PATH_METADATA = {
 import os as _os
 from pelican import signals as _signals
 
-_markdown_mirror_state = {'output_path': None, 'articles': []}
+_markdown_mirror_state = {'output_path': None, 'siteurl': '', 'articles': []}
 
 
 def _prepare_markdown_mirrors(generator):
     _markdown_mirror_state['output_path'] = generator.output_path
+    # generator.settings reflects whatever settings file Pelican was
+    # actually invoked with (e.g. publishconf.py's absolute SITEURL
+    # override) -- unlike the bare module-level SITEURL constant above,
+    # which `from pelicanconf import *` only copies into publishconf.py's
+    # own namespace at import time, leaving this module's own SITEURL
+    # untouched at '' forever. Reading it straight from generator.settings
+    # sidesteps that gotcha entirely.
+    _markdown_mirror_state['siteurl'] = generator.settings.get('SITEURL', '')
     _markdown_mirror_state['articles'] = []
     for article in generator.articles:
         article.markdown_url = _os.path.dirname(article.save_as) + '.md'
@@ -123,7 +131,8 @@ def _prepare_markdown_mirrors(generator):
 
 
 def _canonical_url(path):
-    return (SITEURL + '/' if SITEURL else '/') + path
+    siteurl = _markdown_mirror_state['siteurl']
+    return (siteurl + '/' if siteurl else '/') + path
 
 
 def _write_markdown_mirrors(pelican_obj):