Custom sub-page for blog listing (e.g. /blog/all) with different modules & pagination

Hello HubSpot community,

I have a question: is it possible to have “sub-pages” of a blog listing page (or its equivalent in HubSpot)? If so, what steps should I follow?

For example, my main blog slug is /blog, but Id like /blog/all to display different content and modules without affecting the primary listing and also to include pagination. Any guidance would be greatly appreciated!

Hi @jerequis and welcome, it’s a pleasure to see you here!
Thanks for asking the HubSpot Community!
Are you looking at having a subdomain for your blog listing page or a separate template for your blog listing pages, please?
The more info, screenshots (without sensitive/confidential information), and details you can provide, the better the Community can assist.
Also, I’d love to put you in touch with our Top Experts: Hi @danmoyle, @Mike_Eastwood, @Anton and @Humashankar do you have suggestions to help @jerequis, please?
Have a wonderful day and thanks so much in advance for your help! :heart:
Bérangère

Hey @jerequis,

short answer: it depends on your desired result

Technically HS blogs have following “options”:

  • /blog (listing page)
  • /blog/article-name (detail page)
  • /blog/tag/tag-name (listing for all posts with this tag)
  • /blog/authors/author-name (author page with all posts written by this author)
  • /hs-search-results (global search result)

Something you can do is creating a custom blog listing template that will contain the main listing itself but also a “not simple listing view” ← this would be the “/all” slug in your case.

If you’re not looking for a drag&drop experience of the listing page, the bare minimum of such custom template would look like this:

{% if is_listing_view %}
 Regular listing layout comes here
{% elif simple_list_page %}
 Custom layout for /all
{% endif %}

If you want to preserve the drag&drop experience, create the whole layout in a custom module (might have benefits regarless of your dnd decision) and drop it into the template.

hope this helps,

best,

Anton

Hi @jerequis

Yes, you can absolutely create sub-pages for your blog in HubSpot—like a /blog/all page that shows different content and layout from your main blog listing at /blog. This is a great way to organize your content better, create custom views for campaigns, or offer users a more tailored experience.

What This Means in HubSpot:

By default, HubSpot gives you one main blog listing page (usually /blog). If you want to build something like /blog/all with its own content, layout, and pagination, here are the tools and steps you’ll use:

Tools You’ll Use:

1.Custom Templates – So you can control how things look and behave on /blog/all.

  1. Website Pages – Create a new page just like any landing or site page.
  2. HubL (HubSpot’s coding language) – To pull in blog posts and control pagination.
  3. (Optional) Redirects – To manage clean URLs if needed.

Steps to Set Up a Custom Blog Sub-Page (/blog/all):

Step 1: Build a Custom Blog Listing Template

  • Go to Content > Design Manager.
  • Create a new HTML + HubL file. Select Blog Listing as the template type.
  • Name it something like custom-blog-all-listing.html.

In this template, use HubL to load blog posts. Here’s a simple example:

{% set blog_posts = blog_recent_posts("default", 9999) %}

{% for post in blog_posts %}
 <div class="blog-post">
 <h3><a href="{{ post.absolute_url }}">{{ post.name }}</a></h3>
 <p>{{ post.post_list_summary_field }}</p>
 </div>
{% endfor %}

You can customize this section to show images, dates, authors, etc.

Step 2: Add Pagination

HubSpot doesn’t add pagination automatically on custom pages—you need to code it.

Here’s a simple pagination example:

{% if contents.has_next_page or contents.has_previous_page %}
 <div class="pagination">
 {% if contents.has_previous_page %}
 <a href="{{ blog_page_link(contents.current_page_num - 1) }}">Previous</a>
 {% endif %}

 {% for page_num in 1..contents.total_pages %}
 <a href="{{ blog_page_link(page_num) }}"
 {% if page_num == contents.current_page_num %}class="active"{% endif %}>
 {{ page_num }}
 </a>
 {% endfor %}

 {% if contents.has_next_page %}
 <a href="{{ blog_page_link(contents.current_page_num + 1) }}">Next</a>
 {% endif %}
 </div>
{% endif %}

Step 3: Create a New Page for /blog/all

Go to Website Pages in your HubSpot account.

Create a new page and choose the custom template you just made.

Set the page URL to /blog/all.

Add any modules or text you want—this is your chance to make this page unique.

If needed, use HubL to filter content, like only showing posts with a certain tag:

{% set featured_posts = blog_recent_tag_posts("default", "featured", 9999) %}
{% for post in featured_posts %}
 {# Show your custom post display here #}
{% endfor %}

Step 4: Link to /blog/all from Your Menu or CTA

Make sure users can reach /blog/all by adding it to your navigation or buttons.

Things to Keep in Mind:

SEO: If this page shows the same posts as /blog, make sure to use canonical tags so Google doesn’t see it as duplicate content.

Maintenance: If you create multiple blog listings, use global modules to keep styling consistent.

Use HubDB (optional): If you want even more control (like mixing blog posts with other types of content), HubDB gives you powerful options.

I hope this will help you out. Please mark it as Solution Accepted and upvote to help another Community member.

Thanks!