Back to blog
EN Published by web/template team

Building a blog with Cloudflare D1 and R2

Use D1 for structured publishing data and R2 for durable media without giving up edge delivery.

Abstract edge publishing architecture connecting structured data, media storage, and a global website

A production blog needs more than a page renderer. It needs a clear publishing model, durable media storage, and search metadata that reflects what is actually available.

Keep content and media separate

D1 stores posts, translations, authors, and publishing state. R2 stores original images and other large objects. Keeping those responsibilities separate makes migrations reviewable and media delivery efficient.

Publish translations explicitly

Each translation has its own publishing state. Search engines only receive alternate links for translations that are truly published, while readers can still see the English original inside their selected interface language.

web/template

A reusable website template built with SvelteKit and Cloudflare