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.