Skip to main content
Blog|
How-to guides

How to add a blog to a WordPress site

|
Apr 14, 2026|9 min read
HOW-TO GUIDESHow to add a blog to aWordPress siteHOSTNEYhostney.comApril 14, 2026

Short answer: create a blank page called “Blog,” then go to Settings > Reading, set “Your homepage displays” to A static page, and choose the new blank page as your Posts page. WordPress will automatically turn it into the blog archive – every post you publish shows up there, newest first.

That covers the common case: you have a static WordPress site and want to bolt a blog onto it. The rest of this guide covers the variations – adding a blog to a WooCommerce store, showing only specific categories on the blog page, using a custom template, custom post types as an alternative, and how the RSS feed works.

The default setup (one-time, 60 seconds)#

This is the standard way to add a blog section to any WordPress site where the homepage is currently a static page.

  1. Go to Pages > Add New in the WordPress admin.
  2. Give the page a title like Blog, News, Articles, or Insights – whatever fits your site.
  3. Leave the content area empty. Do not write anything in the editor. WordPress will ignore this content when the page is used as the Posts page.
  4. Click Publish.
  5. Go to Settings > Reading.
  6. Under “Your homepage displays,” select A static page.
  7. In the Homepage dropdown, pick your existing homepage.
  8. In the Posts page dropdown, pick the new blank page you just created.
  9. Click Save Changes.

Visit yoursite.com/blog (or whatever slug you gave the page). You should see your blog archive – a list of all published posts, newest first, with whatever layout your theme provides for blog listings.

If you have never written any posts yet, go to Posts > Add New, publish one, and refresh the blog page to see it appear.

See how to set the homepage in WordPress for the full picture of how the Homepage and Posts page settings interact – particularly the common mistake of pointing both dropdowns at the same page, which creates an infinite-loop-style blank archive.

Why the Posts page must be blank#

A common confusion: people create the blog page, write a nice introduction in the editor (“Welcome to our blog! Here’s what we’re writing about…”), and are surprised when that introduction never appears on the site.

WordPress replaces the content of whatever page you assign as the Posts page with the blog archive. The page’s title is used, the URL (slug) is used, and sometimes the featured image – but the content in the editor is ignored. The archive loop takes over completely.

If you want an introduction to your blog above the post list, you need either:

  • A theme that renders a custom archive intro (rare)
  • A custom page template (covered below)
  • A Full Site Editing block theme with a custom Blog template

For most sites, the cleanest pattern is: leave the Posts page blank and put any “about the blog” content elsewhere – the homepage, the about page, or as a sticky first post.

What if the homepage already shows posts?#

If your Settings > Reading is set to “Your latest posts,” then your site already has a blog – the homepage is the blog. The root of your domain ( yoursite.com/ ) shows the post feed.

This is the WordPress default, and it is fine for sites that are primarily a blog. The confusion starts when you want the homepage to be something else and keep the blog separate. That is when you switch to “A static page” and assign a Posts page, as in the steps above.

Adding a blog to a WooCommerce store#

Exactly the same process. A WooCommerce store is just a WordPress site with a store plugin – the Posts / Pages / Settings > Reading mechanism works the same way.

One thing to watch:

  • Some WooCommerce themes set the Shop page as their homepage. If yours does, Settings > Reading might already be set to “A static page” with the shop as the homepage. You do not need to change that – just add the Posts page dropdown to a new blank “Blog” page.
  • WooCommerce products are a custom post type ( product ), not regular posts. They do not appear on the blog archive. The Blog page shows only posts; the Shop page shows only products.

If you want to feature blog content on product pages (or vice versa), most themes support it through widgets or page builder blocks. Search for “Recent Posts” in the block inserter.

Showing only specific categories on the blog page#

WordPress’s default Posts page shows all published posts. If you want the blog page to show only certain categories – for example, a “News” section that excludes internal updates, or a magazine-style layout with one category per page – you have a few options.

Option 1: exclude categories via Settings > Reading + a code snippet

Not built in. You need a snippet in functions.php or a code snippet plugin:

function exclude_category_from_home($query) {
    if ($query->is_home() && $query->is_main_query()) {
        $query->set('cat', '-5,-12'); // exclude category IDs 5 and 12
    }
}
add_action('pre_get_posts', 'exclude_category_from_home');

Replace the IDs with the categories you want to exclude. See how to add and manage categories in WordPress for how to find a category’s ID.

Option 2: use category archive pages as your “blog”

Every category automatically has its own archive page at /category/category-slug/ . Instead of a global blog page, you can link visitors directly to the category archive for whatever content section you mean.

For example:

  • /category/news/ – only News posts
  • /category/guides/ – only Guides posts
  • /category/case-studies/ – only Case Studies posts

Add these to your navigation menu and skip the global blog page entirely. This is the simplest approach if your content divides cleanly into sections.

Option 3: a custom page template

For more complex layouts (multiple categories side by side, featured sections, custom sorting), create a custom page template. This is a theme-level change – see the custom template section below.

Using a custom template for the blog listing#

If you want the blog archive to look different from the default theme layout – custom hero, sidebar, featured posts section, newsletter signup – you have a few routes.

Classic themes (PHP templates)

Classic themes use a file called home.php for the blog listing when the Posts page is set. If that file does not exist, WordPress falls back to index.php . To customize:

  1. Copy index.php from your theme (or parent theme) into the theme root.
  2. Rename the copy to home.php .
  3. Edit home.php to change the markup, add a hero, change the loop, etc.

If you are using a child theme (and you should be, if you are editing template files), put home.php in the child theme directory.

Block themes (Full Site Editing)

Block themes use a Blog template in the Site Editor:

  1. Go to Appearance > Editor (Site Editor).
  2. Click Templates.
  3. Either edit the existing “Blog Home” template or add a new one.
  4. Use the block editor to design the archive layout.

Changes save to the database, not to a file, so there is no child theme complication – but also no easy way to copy your custom blog template between sites without exporting/importing it.

Page builders

Elementor Pro, Divi, Bricks, and other premium page builders have theme-builder modules that let you design the blog archive visually and assign it to the Posts page. If you are already using one of these, use its theme builder – it will be faster than editing PHP templates.

Custom post types: when they beat a blog#

Sometimes what you actually want is not “a blog” but “a separate stream of content with its own structure.” For example:

  • Case studies with a client name, industry, and result (not just a title and body)
  • Recipes with ingredients, prep time, and difficulty
  • Events with dates and locations
  • Products that are not e-commerce products (portfolio items, services)

These should be custom post types (CPTs), not regular blog posts. A CPT has its own archive, its own URL prefix, its own taxonomies, and its own custom fields – all separate from the main blog.

To create a CPT you need either a plugin (Custom Post Type UI is the common choice), theme support, or code in a theme/plugin. Once created, the CPT has its own archive URL ( /case-studies/ , /recipes/ , etc.) that acts like a mini-blog for that content type – while your main blog stays focused on articles and news.

If your “blog” is starting to feel like a grab-bag of different content types, that is usually a sign you need at least one custom post type to separate them.

The RSS feed#

Every WordPress site has an RSS feed – automatically. You do not need to enable it, install a plugin, or configure anything. The feed for your blog is at:

https://yoursite.com/feed/

Category-specific feeds:

https://yoursite.com/category/news/feed/

Author feeds:

https://yoursite.com/author/username/feed/

Tag feeds:

https://yoursite.com/tag/tutorials/feed/

What the feed is for:

  • RSS readers. Feedly, Inoreader, NetNewsWire – visitors who subscribe get notified of new posts without visiting the site.
  • Email newsletters. Services like Mailchimp, Kit, and Buttondown can turn an RSS feed into an automated newsletter that emails subscribers when you publish.
  • Syndication. Republishers, aggregators, and news sites can pick up content via RSS.
  • Indexing. Search engines use RSS as a freshness signal. Google does not need RSS (it crawls anyway) but many other tools do.

WordPress controls a few feed settings at Settings > Reading:

  • Syndication feeds show the most recent – number of items in the feed, default 10.
  • For each post in a feed, include – full text or summary/excerpt. Full text is friendlier to RSS readers; summary drives more clicks back to the site. Pick based on your audience.

Submitting your feed to Google

You cannot submit an RSS feed to Google directly – Google discontinued that. But you can do two things that produce the same result:

  1. Submit a sitemap in Google Search Console. WordPress generates a sitemap at /wp-sitemap.xml automatically (since WordPress 5.5). Yoast, Rank Math, and similar SEO plugins generate their own sitemaps that often have better structure. Add the sitemap URL in Search Console under Sitemaps.
  2. Use the Indexing API via a plugin (Instant Indexing for Google and Bing) – this pings Google when you publish.

RSS is still useful for human readers and email automation. For search engines, use sitemaps.

Adding the blog to your navigation#

Once the blog page exists, it is not automatically added to your menu. Go to Appearance > Menus, expand the Pages panel on the left, check your new blog page, and click Add to Menu. Save.

For block themes, open the header template in the Site Editor and add the blog page to the navigation block.

See how to add and manage menus in WordPress for the full menu setup.

A quick checklist#

To add a blog to an existing static WordPress site:

  • Create a blank page titled “Blog” (or similar).
  • Go to Settings > Reading and set “A static page,” assign your homepage, and pick the new blank page as Posts page.
  • Add the blog page to your main navigation menu.
  • Publish a first post at Posts > Add New to verify it appears on the blog page.
  • Optionally: customize the blog template (classic theme home.php , block theme Blog template, or page builder theme builder).
  • Optionally: set feed full-text vs summary at Settings > Reading, and submit your sitemap to Google Search Console.

That is the whole setup. WordPress is built around the post/page distinction, so once the Reading settings are right, every new post you publish automatically appears on the blog page, in the RSS feed, and on its category archives – without any extra work.

If you are building the rest of the site’s content structure at the same time, how to add and manage categories in WordPress covers how to group posts into sections, and how to set the homepage in WordPress covers the other half of the Settings > Reading screen.

Related articles