WordPress expands shortcodes at render time via do_shortcode(), so the
raw post_content the export reads still contains them literally. All ten
[caption] instances were being written straight into the Markdown and
rendered as visible markup -- the Hosting page led with
[caption id="attachment_205" align="aligncenter" width="300"].
They now become the same div.wp-caption / p.wp-caption-text structure
WordPress produces, which the ported theme CSS already styles. The
shortcode is swapped for a placeholder before the HTML->Markdown pass and
rebuilt after, so the image inside stays Markdown and still goes through
Astro's image pipeline rather than being frozen as raw HTML pointing into
src/assets, which would not resolve at runtime.
[caption] is the only shortcode in use -- no gallery/embed/video/audio.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>