1) Why build-time beats dynamic for most blogs
A feed that regenerates with your deploy is deterministic: the XML matches the HTML your readers see. You avoid surprise DB calls at the edge and keep caching rules boring — which is what you want.
2) Stable GUIDs and canonical URLs
Each item should use a stable identifier (usually the canonical article URL). Changing slugs breaks subscribers’ readers; plan redirects if you must rename.
3) Dates: published vs updated
Include pubDate from first publish time. If you materially revise an article, bump lastBuildDate at the channel
level or expose an updated field if your template supports it — but avoid noisy churn for typo fixes.
4) Deployment and cache headers
Serve feed.xml with sensible cache lifetimes. Many teams use short TTL at the CDN with purge-on-deploy so subscribers pick up
changes quickly without hammering origin.