What if I told you there’s an SEO tactic that allows you to create hundreds of thousands of high quality pages at scale and at a fraction of the cost of doing so manually?
Welcome to Programmatic SEO.
In this case study, you’ll learn how my team at The Search Initiative grew our client’s organic traffic by 38% sessions.
This was achieved by adopting a programmatic approach to SEO. Instead of hiring writers, we designed a single page template and let programming do the rest, creating 500 pages..
On top of this, the site received links from over 700 referring domains including industry heavyweights like Oracle and Google – without us doing any link building ourselves.
In this case study, you’ll learn how to:
- Do Programmatic SEO and build 1000 page websites with no experience.
If you’d prefer to watch rather than read, I cover some of the key insights in this video.
Before that, here’s some more information about our clients goals and the main challenges that we overcame during the campaign.
The Challenge
The client operates in the software industry, offering a platform to secure and manage open source development for processes that involve custom combinations of tools and platforms.
The client didn’t have any visibility for keywords that would make them money which meant that there was a large **** of lucrative keywords that were missed out on.
Ranking one or two new pages wasn’t going to cut it. So we created a long-term plan on how to attain tens of thousands of keywords and without manual effort optimizing each page… programmatically.
Find out how you can overcome these challenges for your website by following the steps below.
Generating Content Through Programmatic SEO
Traditional SEO focuses on enhancing a website’s search engine visibility through high-quality content and keyword-centric landing pages and blogs. In most cases, it’s a perfect way of building keywords, links, and mentions, as long as your content is well-crafted and adds value to the end user.
But what if there was a way to do this at scale?
What is Programmatic SEO?
Programmatic SEO (often referred to as pSEO) involves creating landing pages at scale through automation with the aim of ranking them on the search results pages.
Each page is uniform, targets a single unique keyword and is created using automated tools and a database.
You’ve probably already used websites that have created pages in this way.
Real estate websites, eCommerce sites, and even content sites (examples below) have been using this method to pass information from one system to another, allowing them to create thousands of properties or product pages populated with data from suppliers with generated titles, headings, images, descriptions etc.
Here’s an example on Realtor.com.
If you were to search “houses for sale in [location]”, you’re likely going to find the following kind of pages in the results.
Los Angeles
New York
Note how the layout of each of these pages is identical, but the content (i.e. the properties) change.
A quick Google search reveals that there are 19,495 cities, towns and villages in the USA. Realtor.com can’t possibly create a page for every location manually. Instead, they use programmatic SEO.
What’s the Difference Between Traditional & Programmatic SEO?
Although the goal of both of these is the same, to grow organic traffic, the difference lies in how this is achieved.
Traditional SEO focuses on growing search visibility over a long period of time with a focus on producing high-quality, unique content that targets higher competition keywords.
Programmatic SEO achieves the same goal, but at a quicker pace as you’re creating multiple pages with an identical layout at scale from a database, templates and automation.
In most cases, if your template takes a page and duplicates it, only changing just the keyword – that sucks for users and will likely also get penalized by Google for having large amounts of duplicate content.
However, if you use a template to create thousands of products and generate helpful content that accurately describes the specific product, you’re creating value to the user, which is what Google is looking for.
However, when it comes to local SEO you do indeed get a free pass and only need to change the city name in order to be “unique enough”.
Example Uses of Programmatic SEO
Apart from real estate websites like Realtor.com, here are some other examples where websites have employed programmatic SEO to build their pages.
Informational Sites
Informational sites like Nomad List use programmatic SEO to help users find the best places to live, work and travel.
The site takes data about things like cost of living, internet speeds etc for places around the world and produces landing pages in a way that is easy to understand and read.
The site is essentially taking readily available data and repurposing it to provide valuable insights to its audience.
Directories and Workflow Apps
Zapier, a workflow automation tool that integrates thousands of applications and tools, programmatically made landing pages for every single tool they work with showing custom workflows that can be made with the unique combination of the user’s chosen tools.
In the financial sector, Wise made a template for a landing page for every single currency they work with, helping their clients convert between any number of currencies.
Travel Itinerary Planners
Platforms like TripAdvisor and Expedia that help users plan their travel itineraries implement programmatic SEO to dynamically generate destination guides, optimize meta tags for popular attractions, and create content tailored to specific travel preferences.
For example, TripAdvisor aggregates hotels based on location so that when you search for keywords like “hotels in japan” or “restaurants in london”, you’ll see pages like this:
Job Portals
Job search websites like Indeed or Glassdoor often use programmatic techniques to generate job listings, company profiles, and other content for search engine optimization.
The template for their job listings pages remain the same. The difference here is that the content is generated by their users i.e. companies and individuals uploading the job listings to their system so that they can be displayed in the relevant listing pages.
These are just a handful of examples, but regardless of your industry or size of website, you can make use of pSEO to generate pages at scale.
Pros and Cons of Programmatic SEO
Here are some of the advantages of Programmatic SEO:
But before you commit to pSEO, here are some things you need to be aware of:
- Lack of Personalization: Automation may overlook the need for a personalized touch in certain aspects of SEO, potentially impacting user experience. You need to ensure that your pages add unique value to the end user.
- Programming Experience Required: Implementing programmatic SEO requires coding skills in order to build rich page templates, work with APIs and integrate various data sources together with your content management system. But, if you don’t have programming experience, you can find developers and specialists on programmatic SEO on sites like fiverr.com.
- Risk of Overreliance on Automation: Relying too heavily on automation may lead to a lack of human oversight, potentially missing nuanced SEO opportunities or issues.
- Dependency on Data Quality: Relies on the accuracy and quality of data inputs, and any discrepancies may affect the effectiveness of the resultant content.
Despite these disadvantages, and even if you don’t have a massive website, you can still incorporate pSEO into your SEO strategy. Read on to find out how…
How to Generate Content Through Programmatic SEO
Creating truly programmatic content requires data that needs to be sourced to create content for hundreds, if not thousands of pages.
We’ll start by identifying keywords that you can target at scale and data sets that you can use to integrate into your content before using Google Sheets and ChatGPT to build out your web pages.
Finding Scalable Keywords
For programmatic SEO to be effective, you need to be able to target hundreds or thousands of similar keywords using a single page template. This requires identifying relevant keywords that have many variations that are similar.
One way to do this is by entering a seed keyword relevant to your website into Ahrefs’ Keywords Explorer tool.
For example, if you had a website about everything vegan, you might use terms like “vegan restaurants”.
Then click on the Matching Terms report, which shows an expanded list of possible keywords related to the seed keyword.
Top tip: consider refining the search results by adjusting the Keyword Difficulty to less than 20 and the Domain Rating (DR) of top-ranking sites to less than 30. This filter will show keywords that are easier to rank for, even with limited backlinks.
Identify patterns within the keywords to see which of these can be used to create pages for programmatically.
In this case, many of the keywords refer to a particular location, preceded by the term “best” i.e. “best vegan restaurants in chicago”.
You can do this by sorting the keywords by “Term” as opposed to “Parent Topics”.
You now have 176 keywords (in the USA) that follow a similar pattern for you to create pages for.
Identify Modifiers
In the previous example, the keywords identified can be split into two categories: head terms and modifiers.
The head term is the top-level category of the keyword that you’ll aim for i.e. best vegan restaurants.
The modifier is what turns the head term into long-tail keywords (these are highly specific search terms that have lower search volumes) i.e. in chicago.
Here’s another example…
For a travel website, you could have the following head term and modifier combination: “things to do” + “in [location]”.
You could also narrow things down further by adding a secondary modifier: “things to do” + “in [location] + “for [target audience]”.
By the end of this process, you’ll have a long list of keyword variations that you can now start to generate content for.
Identify the Search Intent
The next step is to identify the kind of content that will be helpful to people searching for these keywords i.e. the search intent.
Look at the top ranking results for your keywords to work out what you should include within your pages.
For example, here’s a top result for the keyword “best vegan restaurants in chicago”.
The page provides useful information about the various vegan restaurants in the state such as the:
There’s also a short description about the restaurant.
Looking at the top ranking competing pages helps you get an idea of the type of information that’s needed to meet the user’s intent for your chosen keyword.
In this case, searchers want to find out basic information about the restaurant such as where it is (to decide whether it’s close to them) and how to reach out to them (to book a table).
Find Relevant Data
Once you know what kind of information searchers are looking for, you need to source the data.
There are two main options in terms of how you can source your data:
- Private Data – this is data that you may have collected about your business, service or product offerings through surveys, customer insights etc.
This is the most powerful data type as it’s unique, allowing you to provide valuable insights that no one else can.
In doing so, you’re also setting yourself up to earn backlinks (like we did) organically from any other websites that want to use and share your data.
- Public Data – there are numerous public data sources that are licensed for commercial use. This kind of data is easier to find as you don’t have to take the time to collect the information yourself. However, it means that your information isn’t going to be unique, as other websites and companies can also use it.
Here are some great places where you can find commercially licensed datasets:
- Google Dataset Search – a great resource for free datasets, it combines datasets from a number of different providers. Just search for a topic that’s relevant to your website and find a suitable dataset.
- Kaggle – the data sets from Kaggle are primarily used as training data for AI and machine learning ******, but they can also be used to provide additional data points.
As with Google’s Dataset Search, you can find relevant datasets by searching with a keyword. In this case “life expectancy”. Pay close attention to the number of downloads to give you an insight into which datasets are popular (and by extension, reliable).
You can also order the results by age to find the latest data sets that other companies likely haven’t used.
- Government Datasets – you can also get free data sets from government websites like data.gov (US) and ons.gov.uk (UK). They have hundreds of thousands of free datasets that cover all kinds of industries and topics.
You’re now ready to start to build your programmatic SEO content.
Build A Template for Your Landing Pages
After you’ve got your list of keywords and the relevant data sources, you need to build a template for your landing pages.
For the purpose of this case study and to illustrate the process of doing this with programmatic content, we’ll use a simple keyword example: life expectancy + in [country], with a database built on Google Sheets.
However, in order to build truly professional and useful programmatic pages, you should enlist the help of a web developer.
Here’s a link to a sample template that we’ll be using for this case study.
To get the keyword list, I asked ChatGPT to list all of the countries in the world and append them to “life expectancy” i.e. life expectancy in albania, life expectancy in algeria etc.
These keywords were imported into Ahrefs’ Keywords Explorer tool.
Export your keywords from Ahrefs and add them to the “Keyword Data” tab in your template. Delete all columns except:
Note: for illustrative purposes, the template only contains data for the top 10 countries with the highest search volumes.
The second tab on the spreadsheet is where you can store all of the necessary information from your dataset. In this example, we have some basic stats on the life expectancy for various countries.
The third tab on the spreadsheet is where you can put everything together and build out the content of your page.
In more sophisticated cases, you could use APIs to pull the data into your content, but we’ve created a simple Google Sheets formula that pulls the relevant data from the Keyword and Life Expectancy Data tabs into a single tab.
Here’s the formula which populates the sentences with the raw data to complete your content for the pages:
= A2 & " is a " & 'Life Expectancy Data'!B2 & " country with a life expectancy of " & 'Life Expectancy Data'!C2 & " and a total population of " & 'Life Expectancy Data'!I2 & ". Here is some more information about " & A2 & ": - The ***** Mortality (the probability of dying between 15 and 60 years per 1000 population) in " & A2 & " is " & 'Life Expectancy Data'!D2 & ". - In 2015, there were " & G2 & " deaths of children under the age of 5, with " & 'Life Expectancy Data'!E2 & " of these being infant deaths. - The average Body Mass Index (BMI) of " & A2 & " is " & 'Life Expectancy Data'!F2 & ". - " & A2 & " has a GDP of " & 'Life Expectancy Data'!H2
Here’s what the text would look like once populated with the data:
India is a developing country with a life expectancy of 68.3 and a total population of 1395398.
Here is some more information about India: - The ***** Mortality (the probability of dying between 15 and 60 years per 1000 population) in India is 181. - In 2015, there were 1100 deaths of children under the age of 5, with 910 of these being infant deaths. - The average Body Mass Index (BMI) of India is 18.7. - India has a GDP of 1613.18878
In the next steps, we’ll show you how to take this output, and upload it to your website.
But before that, if Google Sheets formulas aren’t your thing, here’s a ChatGPT prompt that can generate one for you:
“I need you to write me a formula for Google Sheets that will reference data from a sheet named "Life Expectancy Data". Here is the data that's in the sheet: Col A = Country Col B = Status Col C = Life Expectancy Col D = ***** Mortality Col E = Infant Deaths Col F = BMI Col G = Under Five Deaths Col H = GDP Col I = Population I've written the copy below with placeholders for each column. Here is the template for the copy: Col A is a Col B country with a life expectancy of Col C and a total population of Col I. Here is some more information about Col A: - The ***** Mortality in Col A is Col D. - In 2015, there were Col G deaths of children under the age of 5, with Col E of these being infant deaths. - The average Body Mass index (BMI) of Col A is Col F - Col A has a GDP of Col H”
Here’ the formula from GPT (which we’ve updated ever so slightly to format the text the right way and ensure that it pulls the data from the correct tab i.e. the Life Expectancy Data tab):
="Col A is a "&B2&" country with a life expectancy of "&C2&" and a total population of "&I2&"."& CHAR(10)& "Here is some more information about "&A2&":"& CHAR(10)& " - The ***** Mortality in "&A2&" is "&D2&"."& CHAR(10)& " - In 2015, there were "&G2&" deaths of children under the age of 5, with "&E2&" of these being infant deaths."& CHAR(10)& " - The average Body Mass Index (BMI) of "&A2&" is "&F2&"."& CHAR(10)& " - "&A2&" has a GDP of "&H2
You can adapt this prompt by replacing the columns with the data points on your dataset and then adjust the content accordingly on the fourth and final tab of the template spreadsheet.
Note that the content generated here isn’t enough to be seen as helpful or comprehensive enough for Google to rank. For your site, with the help of a developer, you’ll be able to build a much richer template and page layout that allows you to provide value to your audience.
In our Life Expectancy example, you could create unique graphs, tables and charts from the dataset which helps users visualize the life expectancy between different countries and provide further insights into what the data means.
Adding additional unique data or information about each country such as the cost of living or insights into why the country has a high or low life expectancy would complete it.
But this is a taste of what you can achieve with programmatic SEO by generating content at scale. It serves as a stepping stone for you to elevate your page by adding unique content or helpful visualizations that depict your data.
Additionally, you can make use of existing page ****** like Expedia and TripAdvisor, which aggregate content generated by their own users (through reviews, ratings and comments), to add additional valuable content to their programmatic pages.
Adding these extra elements will help elevate the quality of your pages and increase your chances of ranking.
Optimize Metadata
Remember, this approach to content creation is all about creating hundreds, if not thousands of pages in a short amount of time. The aim is scalability.
If you’re creating content for this many pages, you’re also going to need to write engaging and SEO optimized metadata for these pages, at scale.
The “Page Builder” tab has just that – columns with formulas that automatically generate the URL, page title, H1 heading and meta description for your pages.
URLs
URLs should be user-friendly i.e. they should be concise and describe what the user (and Google) will find on the page.
Formula: =SUBSTITUTE('Keyword Data'!A2, " ", "-")
The formula above takes the target keyword of the page and separates the words with hyphens.
Page Titles
Page titles should be engaging, describe what the content on the page is about, and ideally include the target keyword that you want to rank for.
Formula: ="<title>" & PROPER('Keyword Data'!A2) & " - PopulationStats.com</title>"
The formula above takes the target keyword of the page, capitalizes it, and the fictional site name is appended at the end.
H1 Headings
As with page titles, the H1 heading should also be engaging and describe what users can find on the page.
Formula: =CONCATENATE("<h1>", PROPER('Keyword Data'!A2), "</h1>")
The formula above takes the target keyword of the page and capitalizes it. This is an element that you can adjust according to the tone of voice for your website.
For example, instead of having <h1> Life Expectancy in Japan </h1>, you may want to edit the formula so that you end up with <h1> Everything You Need to Know About the Life Expectancy in Japan </h1>.
Meta Descriptions
Meta descriptions aren’t a ranking factor, but they’re great for convincing users to click onto your page instead of your competitors as they’re displayed in the search results.
They should describe what the page is about and include relevant terms that entice users to click through.
Formula: =CONCATENATE("<meta name=""description"" content=" "Find out everything you need to know about the life expectancy in ", A2, "."">")
The formula above is a simple concatenation of templated text with the country. It engages the searcher and includes an exact match for the target keyword so that it.
Publish Your Content
Once you’ve created the content for your pages, the final step is to publish it on your website.
This will depend on the content management system that your website is on, but here are a few tools that you can use to make this process as possible.
Here’s how to do it using WP All Import…
Once you’ve installed the plugin, there’s an option to “Upload a file”, “Download a file” or “Use existing file”.
Click on the first box and upload your dataset and then select Import data from this import file into “New Items” and Create new “Posts” for each record in my data file.
In the next step, make sure that your data has been imported into your site correctly.
You can then start to build out the page template by adding in your templated copy and filling in the custom fields based on the imported data.
For example, to important the country name into the page, type {country[1]}
Once you’ve built out your page, the plugin will ask for a unique identifier, click Auto-detect and it should populate the field with the page title.
The final step is to confirm and run your import.
If you head over the Posts section, you’ll see that your pages have been created and published automatically.
Here’s what one of the text pages looks like:
Once you’ve launched your pages, don’t forget to monitor their progress and make adjustments based on their performance.
As mentioned before, the example we’ve provided is a very simple taste of what you can do with programmatic SEO. With the help of a developer, your pages will look and offer much more value!
Index Your Content
Since you’re publishing so much content, it’s a given that Google’s crawlers may get exhausted and will be unable to find and index each page immediately. But there are ways to help make this happen using internal linking and XML sitemaps.
Internal Linking
Internal links for programmatic SEO are significantly more important than traditional editorial pages because you’re publishing so much content at once. This means that you’ll need to give Google’s crawler a nudge so that it can find and index all of these pages.
Considering the scale of pSEO, a great way to approach internal linking for such pages is to silo the pages into top-level directory pages that link to the individual programmatic pages.
Using our example for Life Expectancy, our country pages could be siloed based on continent, so that we have for example:
Asia India Sri Lanka Pakistan Bangladesh China Japan Thailand
Where the Asia page would contain an internal link to pages for all of the countries in Asia.
If you don’t implement internal linking, you risk creating thousands of orphaned pages which will be seen as low-value and will never be discovered by Google.
If you have a WordPress site, check out the Internal Link Juicer plugin which helps you automatically build internal links in your content.
XML Sitemaps
XML sitemaps are files that provide search engines with a structured list of URLs on a website. They enhance SEO by ensuring efficient indexing, helping search engines discover content, and prioritizing important pages.
This enables better visibility and ranking in search results, improving a website’s overall search engine optimization.
Build a sitemap for each individual top-level directory that you created. This will allow you to organize the sitemap by subject and make it easier for the entire section of a website to crawled more easily, at once.
Categorizing your sitemaps like this will also make it easier for you to update, if for example you need to update it by adding new pages or removing existing ones.
Imagine these are the URLs for the Asia section of our life expectancy example:
https://example.com/life-expectancy-in-asia/ https://example.com/life-expectancy-in-india https://example.com/life-expectancy-in-sri-lanka https://example.com/life-expectancy-in-pakistan https://example.com/life-expectancy-in-bangladesh https://example.com/life-expectancy-in-china https://example.com/life-expectancy-in-japan https://example.com/life-expectancy-in-thailand
Here’s what the XML sitemap for the Asia section of your series of pages would look like, it would be called example.com/asia-life-expectancy-sitemap.xml.
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc>https://example.com/life-expectancy-in-asia/</loc> <lastmod>2024-01-08T00:00:00+00:00</lastmod> <changefreq>weekly</changefreq> <priority>0.9</priority> </url> <url> <loc>https://example.com/life-expectancy-in-india</loc> <lastmod>2024-01-08T00:00:00+00:00</lastmod> <changefreq>weekly</changefreq> <priority>0.8</priority> </url> <url> <loc>https://example.com/life-expectancy-in-sri-lanka</loc> <lastmod>2024-01-08T00:00:00+00:00</lastmod> <changefreq>weekly</changefreq> <priority>0.8</priority> </url> <url> <loc>https://example.com/life-expectancy-in-pakistan</loc> <lastmod>2024-01-08T00:00:00+00:00</lastmod> <changefreq>weekly</changefreq> <priority>0.8</priority> </url> <url> <loc>https://example.com/life-expectancy-in-bangladesh</loc> <lastmod>2024-01-08T00:00:00+00:00</lastmod> <changefreq>weekly</changefreq> <priority>0.8</priority> </url> <url> <loc>https://example.com/life-expectancy-in-china</loc> <lastmod>2024-01-08T00:00:00+00:00</lastmod> <changefreq>weekly</changefreq> <priority>0.8</priority> </url> <url> <loc>https://example.com/life-expectancy-in-japan</loc> <lastmod>2024-01-08T00:00:00+00:00</lastmod> <changefreq>weekly</changefreq> <priority>0.8</priority> </url> <url> <loc>https://example.com/life-expectancy-in-thailand</loc> <lastmod>2024-01-08T00:00:00+00:00</lastmod> <changefreq>weekly</changefreq> <priority>0.8</priority> </url> </urlset>
You can set the lastmod (last modified ****), changefreq (change frequency) and priority (a score between 0 and 1) accordingly.
To speed things up, you can use an XML Sitemap generator plugin like XML Sitemap Generator for Google which will automatically generate sitemaps for you.
Once created, submit your XML sitemaps to Google Search Console by clicking on the Sitemaps option on the left-hand side navigation, then enter the URL of your sitemap.
For example: asia-life-expectancy-sitemap.xml
This will help encourage Googlebot to crawl and index your pages sooner.
The Results
Here’s what we’ve achieved by creating just under 500 pages through programmatic SEO for this client over the past year .
The organic traffic grew by 37.9% from 173.5k to 239.3k sessions.
The number of keywords that the site ranks for in the top 10 positions of Google increased from 0 to 1,923 keywords in the past twelve months.
Without doing any link building ourselves, the site received 700+ referring domains came from the programmatic SEO
This includes backlinks from heavyweight industry sites like Microsoft, Oracle, Google and more.
Conclusion
In this case study, I’ve shown how you can attract backlinks organically and grow your organic traffic by producing content in a programmatic way.
You’ve learned how to:
Implementing the strategy above will help grow your visibility for hundreds of keywords by publishing content at scale over time. This will in turn increase your organic search traffic and grow your link profile’s authority by earning backlinks organically.
If you’re looking for help with your site’s SEO, get in touch with my team at The Search Initiative.