How to do Programmatic SEO in HubSpot
TL;DR:
- HubSpot allows for creating programmatic pages with code, but it can be challenging for non-technical users
- Create separate CMS collections for each component of your programmatic pages
- Add custom fields for data variables and link collections with multi-reference fields
- Generate thousands of programmatic pages using Webflow's API
- Consider using Letterdrop for a codeless integration for Webflow that pairs proprietary data with AI for programmatic SEO
As well as being a powerful CRM, HubSpot allows you to create templates and dynamic landing pages for programmatic SEO.
Unfortunately, this can prove a little tedious and still requires a lot of lift on your part. It can also be complicated for non-technical folks as you need to use code.
Luckily, there is a tool out there that integrates directly with HubSpot and has a programmatic feature to help you generate thousands of pages — the right way — without code.
How to Create Your Programmatic Pages In HubSpot
1. First, Collect and Store Your Programmatic Data
There are two ways you can source data for your pages:
- Scrape publicly available datasets yourself or with web scrapers. This includes Data.gov and r/datasets. You can use no-code scrapers like Octoparse or TexAu to do this, although they do come with their own challenges and risks
- Use proprietary data. This makes your pages truly unique. Source information from customers, crowdsourcing, your team, and subject matter experts
Once you have your data, it's time to create a database.
The easiest database to use for your HubSpot pages would be a spreadsheet.
- Every row should correspond to one new programmatic page
- Every column should correspond with a type of data that you would want to insert dynamically on your template pages
Here's an example of a programmatic SEO page database in Google Sheets:
2. Prepare Your CRM Object Data
Each dynamic page will pull its metadata from the properties of the individual records of your selected CRM object. Copy-paste this data over from your spreadsheet.
Ensure your CRM object contains necessary data such as page slug, title, meta description, and featured image.
The dynamic page slug must be a new property configured with "hasUniqueValue": true. For custom objects, update the object schema to create a new property. For standard objects, use the properties API to create a new property.
3. Create a Custom Module for Detail Display
Develop a custom module to showcase individual record details. Use dynamic_page_crm_object to access and display data for the current dynamic page's object instance.
In the design manager, create a new custom module.
Tip: naming the module something like [object type] - detail can make it clear what this module does. For example, Car - detail.
In the module.html
field, add the following code (replace the example use of car with your use case):
{% if dynamic_page_crm_object and !module.car %}{# detail page and content creator has not selected an object#}
{% set car = dynamic_page_crm_object %}
{# easy variable to access the CRM objects properties from #}
{# To see all of the properties your object during development, print it to the page with the |pprint filter #}
<h1>{{car.year}} {{car.make}} {{model}} </h1>
<div class="car">
<div class="carImage">
{% if car.image %}
<img src="{{car.image}}" alt="{{car.year}} {{car.make}} {{car.model}}">
{% else %}
<img src="https://f.hubspotusercontent20.net/hubfs/9307273/Imported%20images/plchldr255.png" alt="Picture coming soon">
{% endif %}
</div>
<div class="carDetails">
<div class="carPrice">
Price: {{ car.price|format_currency("en-US") }}
</div>
<div class="carBody">
Body Type: {{ car.body_style.name}}
</div>
<div class="carDescription">
{{ car.description }}
</div>
<div class="carDistance">
Distance from Cambridge: <span class="dealer_location"> {{ car.location }}</span> Miles
</div>
<div class="carListingDate">
Time since listing: <span class="listing_date">{{ car.date_received }}</span>
</div>
</div>
</div>
{% else %}{# The page is not a dynamic page or the user selects a specific object, we can get the data from a CRM object field if there is data. #}
{% set car = module.car.properties %}
{# easy variable to access the CRM objects properties from #}
{# To see all of the properties your object during development, print it to the page with the |pprint filter #}
<section aria-label="featured car">
<div class="carImage">
{% if car.image %}
<img src="{{car.image}}" alt="{{car.year}} {{car.make}} {{car.model}}">
{% else %}
<img src="https://f.hubspotusercontent20.net/hubfs/9307273/Imported%20images/plchldr255.png" alt="Picture coming soon">
{% endif %}
<h3 class="car-name">{{car.year}} {{car.make}} {{model}} </h3>
<div class="price">
{{car.price|format_currency("en-US")}}
</div>
</div>
</section>
{% endif %}
4. Create Your Programmatic Pages
With the modules created, you can now add them to a page, then select the object as the data source.
- Create a new page, selecting a page template
- In the page editor, click the Settings tab
- Under Page URL, click the pencil icon to edit the page's URL. Set the URL to where you want your listing page to appear. In our car example our listing page will be at:
/cars
. - Click Advanced options, then scroll to the Dynamic pages section.
- Under Dynamic Pages, click the Data source dropdown menu, then select your object. Then, click the Dynamic page slug dropdown menu and select the property to use as the page slug. Only single-line text properties set to
"hasUniqueValue":true
will be available for selection. In our example, the page URL will use the VIN property, which will generate detail pages with the URL slug of:/cars/[VIN value]
- Under Metadata, continue selecting the properties that will populate the page’s metadata. In our example, we’re setting the featured image to a property that contains an image URL for a picture of each car.
- After setting up your metadata, at the top of the page, click the Content tab to return to the editor.
- In the left sidebar, in the Add tab, search for your detail modules, then drag them into the page editor.
5. Publish Your Programmatic Pages
To publish your pages, you will have to do so individually in HubSpot or alternatively opt for a third-party programmatic tool that can connect to HubSpot.
The Challenges of Programmatic SEO in HubSpot
As mentioned at the very beginning of this guide, generating your programmatic pages using HubSpot poses some challenges.
- Creating dynamic pages in HubSpot is complicated and you may need to hire a developer to help you
- You have to manually copy over data and publish pages if you don't have a third-party tool dedicated to programmatic SEO, which takes up time
- Without generative AI, you'll likely get thin content based only on one template and basic variables. This could alert Google to possible spam
- HubSpot doesn't have generative AI to help you make your pages more unique, which means you will have to copy-paste descriptions over from ChatGPT for every programmatic page — this will take hours
There are plenty of programmatic SEO tools out there that you can outsource to help you. However, most of them rely on AI-generated writing on its own to generate your pages — this will get you nowhere with your users, and Google can flag these pages as spam.
Just look at what happened to Causal, who used byword.ai to generate primarily AI-written pages.
If you want to create genuinely helpful pages, you have to pair AI and templates with proprietary data. Placeholders and keywords alone will only lead to thin and spammy content.
No-Code HubSpot Integration that Pairs Proprietary Data with AI for Programmatic SEO
Letterdrop, founded in 2021 by ex-Googlers, acts as a headless CMS and integrates seamlessly with Webflow. It's completely codeless.
Among its suite of smart SEO tooling that lets you optimize for the changing search landscape, Letterdrop offers a programmatic SEO tool that automatically identifies opportunities for programmatic pages on your site, pulling this data from sales calls, Google Search Console, and from top pages on the SERP.
It can then auto-generate these pages for you, pairing proprietary data with AI-generated content to create truly unique and helpful pages.
This is a feature completely unique to Letterdrop.
Put HubSpot Programmatic SEO on Autopilot
You don't want to end up generating thin, placeholder-type programmatic pages that are of no use to your potential buyers.
You need to pair proprietary data with AI in a way that produces pages that can drive business for you at scale.
Let Letterdrop take care of programmatic SEO for your Webflow site from start to finish.
Subscribe to newsletter
No-BS growth strategies and content marketing tactics in your inbox twice a month.
Related Reading
Some other posts you might find helpful