Static HTML export
The simplest integration: BlogFlo generates a self-contained .html file for every post you publish. Download it and drop it anywhere — Nginx, Apache, S3, GitHub Pages, Netlify, Vercel — no server required.
Create a site
In your dashboard, click Add siteand give it a name. When writing each post you can set a canonical URL in the SEO fields — that URL is embedded verbatim in the exported file's <link rel="canonical"> and Open Graph tags.
Configure export formats
Go to Site → Settings → Export and choose which formats appear in the post editor. Static HTML is always available; you can also enable Markdown, PDF, and Google Docs exports from the same screen.
Write and publish a post
Use the BlogFlo editor to write your post. Add a featured image, fill in the SEO fields (title, description, canonical), then click Publish.
Download and deploy
Click Export → Static HTML in the post toolbar. A fully rendered <slug>.html file downloads immediately. Upload it to your host at the same path as the canonical URL you configured.
https://blog.example.com/posts/my-post, upload the file to posts/my-post.html or configure your server to serve it at that path.What's inside the exported file
Every exported HTML file is a single, dependency-free document. You can open it in a browser without any server.
| Included | Details |
|---|---|
<title> + meta tags | SEO title, meta description, robots, canonical URL |
| Open Graph | og:title, og:description, og:image, og:url, og:type |
| Twitter card | twitter:card, twitter:title, twitter:description, twitter:image |
| Schema.org JSON-LD | BlogPosting structured data with author, date, headline, image, and publisher |
| Post content | Full body HTML rendered with your active theme styles inline |
| Featured image | Embedded as an <img> with lazy loading and explicit dimensions |
| Author + date | Rendered in the post header; also present as <time> for accessibility |
Deployment tips
Nginx — serve without the .html extension
Add a try_files rule so /posts/my-post resolves to my-post.html.
location /posts/ {
try_files $uri $uri.html $uri/ =404;
}Netlify / Vercel — pretty URLs
Both platforms automatically strip .html extensions when you deploy static files — no config needed. Upload your files via the CLI or drag-and-drop.
# Netlify CLI netlify deploy --dir ./posts --prod # Vercel CLI vercel deploy ./posts --prod
GitHub Pages — Jekyll pass-through
Add an empty .nojekyll file at the repo root so GitHub Pages serves your .html files as-is without running the Jekyll build pipeline.
touch .nojekyll git add .nojekyll && git commit -m "disable jekyll" git push
Read post data via the REST API
The public REST API returns the raw post content and metadata. Note that the API response contains contentHtml (the article body only) — not the full self-contained HTML file that the Export button generates. Use the API to build your own rendering pipeline, or use the Next.js SDK tab to see how to embed posts directly in a Next.js app.
# Fetch all published posts for a site curl "https://app.blogflo.io/api/public/sites/SITE_ID/blog/posts?limit=100" \ -H "Authorization: Bearer API_KEY" # Fetch a single post by slug curl "https://app.blogflo.io/api/public/sites/SITE_ID/blog/posts/my-post-slug" \ -H "Authorization: Bearer API_KEY"