<p>A <em>Channel</em> called <em>Blog</em> as follows:</p>

<ul>
<li>Entry URL Format: blog/{slug}</li>
<li>Entry Template: blog/_entry</li>
</ul>

<p>In blog/_entry.html:</p>

<pre><code>{% extends "_layout" %}
{% set title = "{{ entry.title }}" %}

{% block content %}
    &lt;article&gt;
        &lt;h2&gt;&lt;a href="{{ entry.url }}"&gt;{{ entry.title }}&lt;/a&gt;&lt;/h2&gt;
        {{ entry.body }}
        &lt;p&gt;Written by {{ entry.author }} on {{ entry.postDate|date('M d, Y') }}&lt;/p&gt;
    &lt;/article&gt;
{% endblock %}
</code></pre>

<p>You don't <em>need</em> to create a <em>Single</em> for the Blog index page.</p>

<p>You can just create a template file: blog/index.html with:</p>

<pre><code>{% extends "_layout" %}
{% set title = "Blog" %}

{% block content %}
    {% for entry in craft.entries.section('blog').find() %}
        &lt;article&gt;
            &lt;h2&gt;&lt;a href="{{ entry.url }}"&gt;{{ entry.title }}&lt;/a&gt;&lt;/h2&gt;
            {{ entry.body }}
            &lt;p&gt;Written by {{ entry.author }} on {{ entry.postDate|date('M d, Y') }}&lt;/p&gt;
        &lt;/article&gt;
    {% endfor %}
{% endblock %}
</code></pre>

<p><strong>EDIT:</strong></p>

<p>If it is a requirement for end users to be able to publish and edit content, other than blog entries, appearing on Blog index page via the CP, then a Single is the way to go.</p>

<ul>
<li>Create custom field(s).</li>
<li>Create <em>Single</em> called <em>Blog Index,</em> or <em>Blog Homepage</em>, or something other than <em>Blog</em>.</li>
<li>Add custom field(s) to Blog Single entry type.</li>
<li>Entry Template: blog/index</li>
</ul>

<p>In blog/index.html:</p>

<pre><code>{% extends "_layout" %}
{% set title = "Blog" %}

{% block content %}
    {{ entry.customField }}

    {% for entry in craft.entries.section('blog').find() %}
        &lt;article&gt;
            &lt;h2&gt;&lt;a href="{{ entry.url }}"&gt;{{ entry.title }}&lt;/a&gt;&lt;/h2&gt;
            {{ entry.body }}
            &lt;p&gt;Written by {{ entry.author }} on {{ entry.postDate|date('M d, Y') }}&lt;/p&gt;
        &lt;/article&gt;
    {% endfor %}
{% endblock %}
</code></pre>

CC BY-SA 3.0
2014-09-05T14:31:39.760Z
Hi Andrea, thanks for taking the time to answer. Your answer is good for listing blog entries on the index page and linking to individual entries. But there is no way to put other content (not a blog entry) on the index page, for example I might want to have intro text describing what the blog is about. That's why I suggested a Single - it can have it's own fields, as well as pull in blog entries.
user1070143
CC BY-SA 3.0
2014-09-05T14:43:34.870Z
Indeed. If it is a requirement for end users to be able to publish and edit content appearing on Blog index page via the CP, then a Single is the way to go. Perhaps edit your original question to point this out?
Andrea DeMers
CC BY-SA 3.0
2014-09-05T15:10:43.800Z
I've edited the original question as you suggested. Bit of a disjointed experience to have the blog main page and blog entries in different parts of the CP.
user1070143
CC BY-SA 4.0
2014-09-05T14:09:45.963Z
2020-01-03T23:20:28.510Z
2020-01-03T23:20:28.510Z
Andrea DeMers
<p>Should I create a Single for the blog home page content (/blog) and then a Channel to hold the entries (/blog/{slug})?</p>

<p>The blog index page also needs to have non blog entries on, i.e. intro text describing what the blog is about.</p>

CC BY-SA 3.0
2014-09-05T12:08:55.960Z
Yes. :) At least, that's one way of doing it.
André Elvan
<channels>
What's the right way to create a simple blog in Craft?
# What's the right way to create a simple blog in Craft?

(Asked by: username_0 on 2014-09-05)

Should I create a Single for the blog home page content (/blog) and then a Channel to hold the entries (/blog/{slug})?

The blog index page also needs to have non blog entries on, i.e. intro text describing what the blog is about.

**Tags:** channels
> **Comments:**
> **username_1**: Yes. :) At least, that's one way of doing it.  

---

## 1 answers

### Answer by username_2 on 2014-09-05. Score: 5 | Accepted answer

A Channel called Blog as follows:

Entry URL Format: blog/{slug}
Entry Template: blog/_entry

In blog/_entry.html:
{% extends "_layout" %}
{% set title = "{{ entry.title }}" %}

{% block content %}
    
        {{ entry.title }}
        {{ entry.body }}
        Written by {{ entry.author }} on {{ entry.postDate|date('M d, Y') }}
    
{% endblock %}

You don't need to create a Single for the Blog index page.
You can just create a template file: blog/index.html with:
{% extends "_layout" %}
{% set title = "Blog" %}

{% block content %}
    {% for entry in craft.entries.section('blog').find() %}
        
            {{ entry.title }}
            {{ entry.body }}
            Written by {{ entry.author }} on {{ entry.postDate|date('M d, Y') }}
        
    {% endfor %}
{% endblock %}

EDIT:
If it is a requirement for end users to be able to publish and edit content, other than blog entries, appearing on Blog index page via the CP, then a Single is the way to go.

Create custom field(s).
Create Single called Blog Index, or Blog Homepage, or something other than Blog.
Add custom field(s) to Blog Single entry type.
Entry Template: blog/index

In blog/index.html:
{% extends "_layout" %}
{% set title = "Blog" %}

{% block content %}
    {{ entry.customField }}

    {% for entry in craft.entries.section('blog').find() %}
        
            {{ entry.title }}
            {{ entry.body }}
            Written by {{ entry.author }} on {{ entry.postDate|date('M d, Y') }}
        
    {% endfor %}
{% endblock %}

> **Comments:**
> **username_0**: Hi Andrea, thanks for taking the time to answer. Your answer is good for listing blog entries on the index page and linking to individual entries. But there is no way to put other content (not a blog entry) on the index page, for example I might want to have intro text describing what the blog is about. That's why I suggested a Single - it can have it's own fields, as well as pull in blog entries.  
> **username_2**: Indeed. If it is a requirement for end users to be able to publish and edit content appearing on Blog index page via the CP, then a Single is the way to go. Perhaps edit your original question to point this out?  
> **username_0**: I've edited the original question as you suggested. Bit of a disjointed experience to have the blog main page and blog entries in different parts of the CP.  

---

