This page was made in Builder!

Creating a blog in

Powering your blog with Builder empowers your editors to build exciting blog articles easily and visually.


If you don't have one already, go create an account over at

In this example we are also assuming you are a developer and will be hooking up this blog to a custom website or app

Create a Blog Article model

Now let's add our fields. We recommend adding the following fields:




This will be the article title when listing articles and for the page <title> tag for SEO. E.g. "Announcing our new product line"



This will be the URL handle, e.g. new-product-line



This will be the main image for the blog post (e.g. when listing articles) as well as the og:image for previewing on social media sites like Facebook



This will be the date for displaying when this was posted and for filtering by date posted



(optional) this will be the preview text when listing blog articles, and optionally can. be the SEO meta description as well



(optional) to list info about authors, we recommend making a new data model (e.g. with fields full name of type text and photo or type file) and using a reference type to reference the author for an article

Tip: You probably want to mark some of those options, like Title, Handle, Image, and Date as required so the editor must enter those values to publish

Connect this to a site

Now, you can query your Blog Articles using our Javascript SDK, Content API, or GraphQL API.

List articles

To list articles, fetch the articles and render each one. E.g. for a page at

Next.js Example

import { builder } from '';


const articlesPerPage = 30;

function Blog({ articles }) {
  return (
      { => (
        <Link href={`/blog/${}`}>
          <div css={{ overflow: 'hidden', width: 300 }}>
            <div css={{ width: 300, height: 200, display: 'block' }}>
              <img src={} />

Blog.getInitialProps = async ({ req, res, asPath, query }) => {
  const page = Number( || 0;
  const articles = await builder.getAll('blog-article', {
    req, res,
    // Include references, like our `author` ref
    options: { includeRefs: true },
    // For performance, don't pull the `blocks` (the full blog entry content)
    // when listing
    omit: 'data.blocks',
    limit: articlesPerPage, 
    offset: page * articlesPerPage

  return { articles };

export default Blog;

Display an article

Next, let's render an individual article

Next.js Example

import { builder, BuilderComponent } from '';
import Head from 'next/head';
import Link from 'next/link';


function BlogArticle({ article }) {
  return (
      {!article ? (
          <div css={{ textAlign: 'center', padding: 50 }}>
            Article not found. <Link href="/blog">Back to the blog</Link>
      ) : (
            {/* Render meta tags from custom field */}
            <meta name="description" content={} />
            <meta name="og:image" content={} />

            {/* Render the Builder drag/drop'd content */}
            <BuilderComponent name="blog-article" content={article} />

BlogArticle.getInitialProps = async ({ req, res, asPath }) => {
  const article = await builder
    .get('blog-article', {
      // Include references, like our `author` ref
      options: { includeRefs: true },
      query: {
        // Get the specific article by handle
        'data.handle': asPath.split('/')[2],

  if (!article && res) {
    res.status = 404;

  return { article };

export default BlogArticle;

Add a preview URL

Once you get the code setup locally, let's connect your local site to the Visual Editor. This will allow for accurate previewing and editing as well as using your custom components directly in the editor!

To do this, go back to, choose Blog Article, and find the preview URL option. Enter a URL that will route on your site to the BlogArticle page, for instance http://localhost:3000/blog/_ (assuming you are using the format /blog/:handle)

Enter in the URL and hit save

Create a Blog Article

Now you can go to, hit + New Entry and choose Blog Article. You should now see the drag and drop editor loaded right onto your local site!

You can now create articles visually and publish them ready.

Note: when you publish your site updates to production, you will want to update your editing URL to be a production URL, such as and no longer a localhost one so anyone can create blog posts visually

And that's it!

We've showed several key features here such as custom models, custom fields, and connecting to your website

If you have any questions at all, please ask in our forum!

Was this article helpful?