Programmatic SEO

Programmatic SEO: Complete guide for 2022 with examples

by Arso, Boris and Momčilo
15 mins
28. Jan 2022.

Not so long ago, I and my team @thebcms decided to use programmatic SEO as our strategy to build dozens of landing pages, and I was thrilled 🤩. BCMS is a Headless CMS software that helps developers, content editors, and designers create fast and powerful websites - together. As a first marketing hire, I could explore different strategies and experiment a lot. One of the first things I worked on was creating and implementing the Programmatic SEO strategy. Luckily, I’ve documented the whole process, so I might help you apply this strategy for your project and save you from (some) trials and errors. Here we go:

Programmatic SEO at BCMS

We leveraged our knowledge in web development, serverless, and headless CMS area to craft meaningful dynamic landing pages.

Results so far

We created unique and universal content for more than 2k for a short time to achieve a better ranking on Google. We published those landing pages in November 2021, and now we are following Google analytics. Look at this example: for the first 30 days, these pages generated 2880 organic visits. But not only is this generating traffic, but most importantly, it also provides us a glimpse into the niche search trends, helping us prepare better for what's coming.

So I want you to think of this text as your guide, your suit sawyer; I will describe every step and hope I'll help you find a new way of effectively doing things. Let's dive in!

What is Programmatic SEO?

By programmatic SEO definition, it is a strategy that helps build landing pages on a large scale to increase search traffic. That provides more visits to your website, you are more likely to have a better ranking, and you will be able to reach a targeted audience and give the answers they are looking for. The best way to explain this is as an example. Have you ever visited Tripadvisor or Airbnb to arrange your traveling? What do they have in common? Besides inspiring people to travel, they use programmatic strategies to make them your first choice when looking for accommodation and/or places you want to visit.

How do they do so? Tripadvisor SEO is leveraging a massive list of hotels they already have in their database to create a dedicated page for every city in the world. In this example, Madrid. What does Tripadvisor get by using this strategy? Answers people want to know and, at the same time, more visits to their content. Imagine how many cities and hotels exist globally and how many landing pages they need to build. As you can see, SEO programmatic is a powerful tool if you use it correctly. So, you can rely on this strategy, but you need to be well prepared. You can not forget that you must have high-quality content with proper keywords and be sure who your target audience is. Or who is a person interested in your content, product, service, or anything you want to offer or promote?

Basics of Programmatic SEO

Programmatic SEO is a systematic and data-driven approach to finding keywords. More accurate, adequate keywords. On the technical side, by using this approach, you will understand the user's intent and create hundreds of landing pages. On the other hand, the SEO part is essential and accessible when you think about content. The mindset goes this way; you need to understand what people want, their doubts, and what they don't know, and then give them the correct answers by creating high-quality content.

Programmatic SEO Benefits

Programmatic can provide some more advantages besides getting all crucial information about your users' needs to implement into your content. One of the main benefits is speed.

Programmatic SEO helps to avoid a slow SEO process

You know how they say, "Slow and steady wins the race." Well, in this case, that is entirely inaccurate. Programmatic strategy is a perfect solution to do your job as fast as possible in an effective way. Under the highest possible speed, you are getting a customized website with your user's experience. That results in a captivating engagement between the user's interests and the brand you represent. Why is that? Because for a programmatic, one of the most important things is to find out the customer's transactional intent.

Programmatic SEO focuses on transactional intent

It is one of the four types of keywords intent. This particular one refers to keywords that indicate a searcher’s intent to buy something or take action on a website soon. So basically, you are getting keywords phrases that include a specific product or brand name joint with so-called buying words.

For example, if somebody searches "Buy pets online, "that shows that someone is willing to buy or take some action; this intent is crucial if you are in a pet business. What does programmatic SEO do? Join your offer with consumers' wishes.

Programmatic SEO reaches out to a massive audience

Being present on multiple platforms, with so many offers, and craving to reach out to many people as possible is not an easy task to complete. Thanks to pure SEO optimization, programmatic strategy can do this job more efficiently. This will empower your business and enable mutual growth of your success and the amount of your audience.

How to do Programmatic SEO?

When I researched programmatic SEO for websites, I was ready to start doing some jobs. I thought it would be challenging to create content for so many pages, and the truth is, it was so much easier. So, in this part, I will try to explain all steps I took to make creating landing pages possible. First, I imagined a page as some kind of template. As a former journalist, it was much easier to make a page scheme. So basically, I divided the page into sections, like sections that any media website has, and then I put questions in every section, and my idea was that answers to those questions were the content I wanted to have. To make it clearer, I’ll explain what my idea was. I needed to write a text about using headless CMS to build different websites. As I mentioned above, I asked some typical journalists questions.

  • Why should a website have a headless CMS?

  • When to use headless CMS?

  • What does a headless CMS have to offer that other website options don’t?

  • How to start using headless CMS for your website?

Now with these questions in mind, I was ready to start doing some research about keywords.

Programmatic SEO keywords: finding plenty of them

This was the first and most crucial step. It's all about capturing search traffic that's relevant to your business or web page. As in any SEO strategy, the right keywords are essential for content creation. Your target audience's search intent can vary based on their keyword usage. For finding keywords for a larger scale, you need to do some classification. The first category must contain words that are frequently searched. Those words are going to be head terms. It's essential to notice the difference between keywords.

How to find keywords for programmatic SEO?

Main terms have a massive amount of search volume, and those words are the most used ones when it comes to Google search. Using the right keywords as leading terms can contribute to a better ranking. But how to be sure which keywords are the best choice? Well, there are handy tools that can help you make the right choice. The web is full of keyword generators that can inform you about what people are searching, such as:

All these tools are helpful not just to find keywords but also to do competitive analysis. That means you can find out what your competitors do or use when creating their content. For example, Google Trends provides valuable information about audience interests through time. You can follow people's interests and how they are changing based on time, location, even the way they search for something. In my case, here what's Google Trends shows:

Just looking at this example, you can see how easy it can be to find good topmost terms. Once you find a few top-ranking terms, you are ready for the next step, identify modifiers.

How can modifiers help you in your programmatic strategy?

It's crystal clear that your head terms will have the most significant search volume in general. When searching, people don't use just one keyword. Things they write before or after head terms are modifiers that can give you a bigger picture of the topic they are interested in. But combining them with the modifiers leads to real search volume. Modifiers are divided into: Primary modifiers: This group helps you create a brand new category. Secondary modifiers: Think of them as adjectives. They give descriptions and determine more closely what the audience's intent is.

What to do with these words? Put them all together! With a mixture of all keywords, you’ve done an outstanding job, and you’ve got well-done materials for your content.

Let me show you how this works. You can choose any word from any column, and you will get the sentence that still has a sense. This is just a part of a list I used for my programmatic strategy. What is the most popular CMS for the Company website? Or, What is a secure Headless CMS for E-commerce? This is pretty cool, right? Wait to see another more fantastic magic. We got an extensive list by implementing this list into our headless BCMS. After compiling desired keywords in a list, you will typically have a lot of data to use on your site. You may have over 100k search terms sometimes, but don’t worry - even if you have a lot less, you can still create more than 2000 landing pages.

Creating Programmatic SEO landing pages

After targeting keywords and finishing all competitive analyses, it's time to create landing pages. Building landing pages is another delicate part of any programmatic strategy. Remember that you have to build many pages that need to be different and unique. The first question I asked myself was: Do I have to build a landing page for every keyword I found? The answer is no! Why not? Well, it's simple; Google can help me with that. As Google is good at related topics, I figured creating a landing page per searcher intent is better than making it for every keyword. This is the best strategy since people use search results differently, depending on their ultimate goals. Look at this example. I typed "Best headless CMS for the website" and looked at Google-related topics.

This strategy can help you determine what Google considers as a specific keyword search intent. Another cool thing is that Google often highlights in bold words, which can also be a good indicator. After all of this, I had a clear vision and prepared sections, and the developer team was able to create the template and design of the page. The form of a landing page is another essential factor. Focus here is on targeted keywords that can help you rank better, and the goal is to increase your share of total search traffic to get a call to action. The landing page needs to be designed to capture the audience’s attention for those reasons. An effective way to accomplish this is to keep your page clear, informative, and direct, emerging to better user experience. Again, our headless CMS was an excellent tool for that. The core of BCMS is to keep it simple and clean but modern, so we did that for our pages.

We have a template and a design, and my next topic on the menu is the most important one: content.

How to adjust content into programmatic?

This was one of the crucial questions for me. How to write creative and exciting content in such an SEO-optimized environment? I want to have high-quality written content, but how can I escape the trap of text full of keywords that Google likes but users not so much? How can I make Google fall in love with my content and audience?

Let keywords guide your content

I used high-ranking terms naturally and logically because I knew that my readers are real human beings and not some robots eager to see how much I completed my SEO optimization. Modifiers helped me give context and explain further what the landing page is about. Then I wrote phrases that weren’t so important for ranking but were crucial to answering mostly asked questions. The final product looks something like this:

I want Google to understand my content

Even if my goal is to get the audience helpful content, I need to please my search engine. Besides being logical and creative, content needs to be structured so that Google can read, analyze and recognize it. Here are some essential things: Title tag: The page’s title should be short and include a high-quality keyword. Keywords should be close to starting, but you can use modifiers too.

Alt attribute: Add alt attributes to images. Google does not see the images. Describing images with alt attributes makes the site more accessible and relevant.

Meta description: Meta description is a direct ranking factor as an HTML element that describes and summarizes the contents of your page for the benefit of users and search engines.

Headings: An H1 heading needs to match your page title. Use H2 and H3 headings to structure your content. These headings need to include secondary modifiers in secondary headers. Internal links: Internal linking is imperative! Building links increase your website and help Google to comprehend the context and content of a landing page.

External links: Linking your content to external sources, even to your competition, provides more credibility. Images and videos: Adding images or videos to your content makes your content more valuable. Be careful, don’t forget to label these files with ranking terms.

How to make URL structure programmatic?

Every little detail is vital in SEO strategies, so don’t forget about your landing page URL. As an identifier, a URL gives some information about your web page and even your content. For Google, the URL provides the first impression. We all want to provide an excellent first impression when we meet a new person, so obviously, you want to do that with your URL page too. How? Keep it simple! URL needs to be short and clean. Try to keep your URL short, no more than 65 characters. You can use slashes to separate concepts. Place essential keywords further to the left.

Extra tip: Do not include dates in the URL! If you use dates, your content will become irrelevant for Google after some time. If you don’t use dates, you open new possibilities for your landing page updates. Updates can prevent your content and give him relevancy for an extended period.

Programmatic SEO challenges: How to fight them?

Results of programmatic are dozens of generated pages on a website. But if you don’t check everything, those pages won’t be so helpful. In this part, I will try to mention issues that you can meet by doing programmatic and how to solve them. The first and the most common problem you face is getting the pages crawled.

Crawlability

When you have thousands of pages, it is critical to prioritize which pages should be discovered by Google. It’s simple if Google can’t find the page, it can’t rank it. It is also important to establish an internal linking pattern to robust information architecture. To ensure that the search engine always finds your page, besides internal linking, make sure each is categorized. Yup, that’s right. Don’t be afraid to use an HTML sitemap.

Using HTML sitemaps help crawlers find new pages. Sitemaps are highly effective when working on large-scale sites with millions of pages. The best way to create a user-friendly sitemap with a logical structure is to organize pages in groups by categories or other criteria. Also, it is crucial to include the most important pages first. You can do it in alphabetical order too.

Lack of content

A lot of SEO programmatic landing pages are based on visuality. There are images, videos, graphics, but you can’t forget the descriptive text. The descriptive text has a tremendous influence on ranking. Without enough text, Google will treat content on your page as thin content, leading to a lower scale because inadequate content for Google has low value. So, the best thing to do is to have both, the text helps to interpret data better, and visual content provides a better user experience.

“Copy-Paste" content

When creating content for a large scale, you can fall into a severe trap, creating duplicate content. This refers to the parts of content that are either identical to one another or very similar. Identical content is a common issue because you create content following the same pattern for every page, and the challenge is to stay unique.  There are two types of this content: Internal duplicate content refers to content where one domain creates copy through multiple URLs on the same page. External duplicate content: This happens when Google considers that two or more different domains have identical page copies.  Twin content is confusing and forces Google to choose which page should rank better in search top results. To avoid this problem, you can use an online duplicate content checker. You can quickly get how Google analyzes your web page by copying the URL to this checker.

Doorway pages

"Doorways are sites or pages created to rank for specific, similar search queries. They are bad for users because they can lead to multiple similar pages in user search results, where each result ends up taking the user to essentially the same destination. "  This is how Google defines doorway pages. That sounds like a definition of programmatic strategy, right? In my case, some of my titles are:

These examples can be doorway pages by default. But why aren't they? Again, content is the strongest trump card, and Google allowed landing pages that my team and I created just because of original content.  The best way to avoid doorways is to find unique content, products, or services on all those pages, and it might be acceptable depending on how users interact. So, keep this in mind; as long as your content has a real reason to exist, Google won't kick it out.

Landing Pages at Large Scale Strategies:

Quick recap: All the landing pages most likely will include the same structures: pictures, lists, call to action button, sitemap, reviews, etc. They’ll probably have the same design and layout. However, every page can’t have the same content.

It’s challenging to produce and give unique content for different landing pages. Besides everything I already wrote about, some landing page strategies can be excellent SEO guides.

Two-sided marketplace

This is one of the best and most well-known ways to do programmatic SEO. Using this approach, you can fill the pages with content, including images, listings, Q&A, product descriptions, etc. On the other hand, the audience can leave reviews or become vendors. All of that creates unique content for every single page. Many companies use this strategy; some are Airbnb, eBay, Apple, Amazon, Uber, Netflix…

On Airbnb example, you can understand this strategy readily. Airbnb operates as an online marketplace for lodging, primarily homestays for vacation rentals and tourism activities. Besides creating their content, Airbnb allows their customers to leave comments, reviews and even become hosts. This guest posting creates new original content on a page by writing all the details about his rental.

Community

Communities like Reddit, Quora, and even Pinterest are the pages that create unique content daily. As long as they have active members, you can get new content. It is super helpful because that opens the possibility to connect their content into landing pages.

For example, If someone searches “Headless CMS,” a Reddit forum is in the top search results. You can use those questions, discussions, and debates to update your content.

E-commerce

E-commerce websites are full of product pages that may have the same general info, but you’ll be in charge of filling out unique product details for each page, benefits, specifications, and prices.

Besides writing different characteristics about products, there are Q&A and reviews sections. That is user-generated content that makes each page more unique.

Programmatic SEO supported by headless CMS.

This chapter is dedicated to the story's more "geeky" side. Doing a programmatic strategy involves working together with a developers department.

All keywords research, written content, and SEO strategy are not worthy if you don’t do the right job on the development side. For me, as a person who belongs to the marketing department, this developer side seems to be more tricky and complicated than anything. The truth is, it is effortless to understand.

Why choose BCMS to do programmatic SEO?

BCMS, like a headless CMS, is constructed to be simple but fast and effective. With headless, one of the most significant advantages is that it is update friendly. That means that if you want to make changes, you don’t have to start from scratch; BCMS can help add new features effortlessly.  Our experience showed that headless CMS is the best way to do programmatic SEO for many pages together.   There are a couple of things that you need to put your attention to:  Find the data you want to put on landing pages Format those data based on headless CMS, in this case, BCMS Upload those data using BCMS API. By using API, you avoid making the pages manually. The first thing that our back-end developers team did was to create a new CMS collection with defined items. After determining those collections, they were ready to add different content such as text fields, rich text, and images to each item.

Generating landing pages using API

Reading through the API documentation was straightforward. The code used in our project is not very different from the example code, so what did we do? We copy-pasted the example code and only modified it wherever necessary. That led us to create a new CMS collection item. Thanks to the multi-reference field, we made reference items to the different CMS collections and displayed all data from any group. Generating pages based on templates would be the easy part. The hard part is figuring out how to drive internal links to those dynamically created pages, updating site maps, setting up rules for excluding garbage pages, duplicates, spelling mistakes, plurals, etc.

Building programmatic landing pages in BCMS

Setting up the CMS

Create a new “Programmatic” template.

Create an “SEO Column” group with the “Words” property of type String Array. A generic name (SEO Column) is being used because we can have as many columns as needed - while we are using it for synonyms and types columns only, there can be the 3rd column for adjectives (blazingly fast, best, well-known, etc.).

Inside of the “Programmatic” template editor, create a new property called “Columns” that is pointing to the previously-created “SEO Column” Group and toggle Array on. This way, we can add our 2 columns of words, one for synonyms and one for types. Create a single “Programmatic” entry with 2 columns. Add synonyms in the first column and types in the second one. Synonym examples: CMS, Headless CMS, Content Management System…, and types: Marketing Website, Branding Website, Startup Website… Add text content (widgets, H1,H2,H3,P, etc) and in places where we want to use synonyms, we replace it with {{ synonym }}, same for the type - {{ type }}. E.g., “The best {{ synonym }} for {{ type }},” which in the end can result in “The best CMS for Marketing Websites“ or “The best Content Management System for Branding Websites.” Check out the finished product here.

Setting up Nuxt.js

Let’s start by adding our typescript files:

      `types/groups/seo-column.ts`:

export interface SEOColumnGroupType {
  words: string[];
}

`types/templates/programmatic.ts`:

import { BCMSEntryContentParsed } from "@becomes/cms-most/types";
import { SEOColumnGroupType } from "../groups/seo-column";

export interface ProgrammaticMetaType {
  title: string;
  slug: string;
  columns: SEOColumnGroupType[];
}

      

Create a new “store/programmatic.ts” vuex module file. Here, we will store all synonyms and types ( in their singular and plural forms - we will be using the ‘pluralize’ package ) that we fetched from the entry we have in the CMS, as well as have the logic for getting them via vuex getters:

      ​​import { GetterTree, MutationTree } from "vuex";

export const state = () => ({
  types: {} as {
    [key: string]: { plural: string; singular: string };
  },
  synonyms: {} as {
    [key: string]: { plural: string; singular: string };
  },
});

export type ProgrammaticState = ReturnType<typeof state>;

export const getters: GetterTree<ProgrammaticState, ProgrammaticState> = {
  getType: (state) => (payload: string) => state.types[payload],
  getSynonym: (state) => (payload: string) => state.synonyms[payload],
  getRelatedProgrammaticArticles: (state) => (payload: {
    synonym: string;
    type: string;
  }) => {
   const typeIndex = Object.keys(state.types).findIndex(
      (e) => e === payload.type
    );
   const relatedArticles = Object.keys(state.types).slice(
      typeIndex + 1,
      typeIndex + 7
    );
    if (relatedArticles.length < 6) {
      const rest = 6 - relatedArticles.length;
      relatedArticles.push(...Object.keys(state.types).slice(0, rest));
    }
   return relatedArticles.map((e) => {
     return {
       slug: `/${payload.synonym}-for-${e}`,
       title: `${state.synonyms[payload.synonym].singular} for ${
         state.types[e].singular
       }`,
     };
   });
  },
};

export const mutations: MutationTree<ProgrammaticState> = {
  SET_TYPE(state, payload: [string, { plural: string; singular: string }]) {
    state.types[payload[0]] = payload[1];
  },
  SET_SYNONYM(state, payload: [string, { plural: string; singular: string }]) {
    state.synonyms[payload[0]] = payload[1];
  },
};
      

“getRelatedProgrammaticArticles” getter from the above is used to find and return the following 6 articles from the list with the same synonym ( payload.synonym ), starting from the “typeIndex + 1”. This will be useful for creating a list of cards at the bottom of each Programmatic page, which will point to other articles with the same synonym. E.g., Let’s say we have 16 types in total, and we are located on the page with the “CMS” synonym and “Marketing Website” type, which is the 10th type in our array of 16. In this case, we will return the following 6 articles with the “CMS” synonym and 11-16 types. On the other hand, if there are a maximum of 12 types, we will still be showing the following 6 articles, so if we are on the 10th type, we will show 11-12 and 1-4 types. This way, we will have every dynamic page with this synonym created at some point in the list, which in the end will make the Nuxt crawler find all these pages and dynamically generate routes for them.

Fetch all synonyms and types in the root store file ( store/index.ts ), and push them to the vuex store with singular and plural forms. We are doing this in the nuxtServerInit vuex action because we want to fetch this data only once, and we want to prefill our vuex state:

      import pluralize from "pluralize";
import { Context } from "@nuxt/types";
...
async nuxtServerInit({ commit }, ctx: Context) {
  pluralize.addUncountableRule("CMS");

  const programmaticMeta = await ctx.$bcms.findOne("programmatic", {
    query: (vars: any, item: any) => {
      return item.meta.en;
    },
  });

  programmaticMeta.columns.forEach(
    (column, columnIndex) => {
      if (columnIndex === 0) {
        column.words.forEach((word) => {
          commit("programmatic/SET_SYNONYM", [
            word.toLowerCase().replace(/ /g, "-"),
              {
                singular: word,
                plural: pluralize(word).replace("CMS", "CMSs"),
              },
            ]);
          });
      } else if (columnIndex === 1) {
        column.words.forEach((word) => {
          commit("programmatic/SET_TYPE", [
            word.toLowerCase().replace(/ /g, "-"),
              {
                singular: word,
                plural: pluralize(word),
              },
          ]);
        });
      }
    }
  );
},

      

Create “seoReplace” mixin. In this mixin, we have only 1 method - “replaceSEO,” and it will be used to replace {{ synonym }} and {{ type }} from any text to their respective values from the vuex store in plural or singular form. Make sure this is a  global mixin:

      import { VueMixin } from "@/types";
import { mapGetters } from "vuex";

const mixin: VueMixin = {
  computed: {
    ...mapGetters({
      getType: "programmatic/getType",
      getSynonym: "programmatic/getSynonym",
    }),
  },
  methods: {
    replaceSEO({
      text,
      isSynonymPlural = false,
      isTypePlural = false,
      isTypeLowerCase = false,
      isSynonymLowerCase = false,
    } : {
      text: string;
      isSynonymPlural: boolean;
      isTypePlural: boolean;
      isTypeLowerCase: boolean;
      isSynonymLowerCase: boolean;
    }) {
      const fullSlug = this.$route.params.slug;
      const lastIndex = fullSlug.lastIndexOf("-for-");

      const slug = [
        fullSlug.substr(0, lastIndex),
        fullSlug.substr(lastIndex + 5),
      ];

      let synonym = this.getSynonym(slug[0]);
      let type = this.getType(slug[1]);

      if (isSynonymLowerCase) {
        synonym = {
          singular: synonym.singular.toLowerCase(),
          plural: synonym.plural.toLowerCase(),
        };
      }

      if (isTypeLowerCase) {
        type = {
          singular: type.singular.toLowerCase(),
          plural: type.plural.toLowerCase(),
        };
      }

      return text
        .replace(
          /\{\{ synonym \}\}/g,
          isSynonymPlural ? synonym.plural : synonym.singular
        )
        .replace(/\{\{ type \}\}/g, isTypePlural ? type.plural : type.singular);
    },
  },
};

export default mixin;
      

Create “pages/_slug.vue” where we will show content and related articles:

      <template>
  <div class="programmaticPage">
    // Used to loop over widgets and H1,H2...,P,Ul from CMS content section
    <ContentManager v-if="content.length > 0" :data="content" />
    // Used to show next 6 related articles
    <ProgrammaticRelatedWidget
      :title="
        replaceSEO({
    text: `<h2><strong>{{ synonym }}</strong> are also suitable     for:</h2>`,
    isSynonymPlural: true
   })"
      :articles="relatedArticles"
    />
  </div>
</template>

<script lang="ts">
import Vue from "vue";
import ContentManager from "@/components/widgets/ContentManager.vue";
import { BCMSEntryContentParsed } from "@becomes/cms-most/types";
import ProgrammaticRelatedWidget from "@/components/widgets/ProgrammaticRelated.vue";

interface Data {
  title: string;
  content: BCMSEntryContentParsed;
  relatedArticles: Array<{
    slug: string;
    title: string;
  }>;
}

export default Vue.extend<Data, unknown, unknown>({
  components: {
    ContentManager,
    ProgrammaticRelatedWidget,
  },
  async asyncData({ $bcms, store, params }) {
    const fullSlug = params.slug;
    const lastIndex = fullSlug.lastIndexOf("-for-");

    const slug = [
      fullSlug.substr(0, lastIndex),
      fullSlug.substr(lastIndex + 5),
    ];

    const programmaticContent = await $bcms.findOne<BCMSEntryContentParsed>(
      "programmatic",
      {
        query: (vars, item: any) => {
         return item.content.en;
      },
    });

    const relatedArticles = store.getters[
      "programmatic/getRelatedProgrammaticArticles"
    ]({
      synonym: slug[0],
      type: slug[1],
    });

    return {
      title: `${
        store.getters["programmatic/getSynonym"](slug[0]).singular
      } for ${store.getters["programmatic/getType"](slug[1]).singular}`
      content: programmaticContent,
      relatedArticles,
    };
  },
  head() {
    return {
      title: this.title,
    };
  },
 });
 </script>
      

Earlier in the text, we mentioned that once the Nuxt crawler finds one page, it will generate other pages with the same synonym because of the related links we have at the bottom of each page. We have two issues here. First, we need that 1st page to be somewhere in our crawlable app, linked with the component. The other issue is that, once we find this one page, we will generate only pages with that 1 Synonym, but what about the other ones? In the end, we need a way to generate all these pages. That is why we can do something like this in our nuxt.config.js file:

      generate: {
  async routes() {
    const content = JSON.parse(
      (
        await util.promisify(fs.readFile)(
          path.join(__dirname, "bcms", "content.cache.json")
        )
      ).toString()
    );

    const routesToGenerate = [];
    // Find all synonyms and for each of them generate a page with the first type. 
    // These pages will then have links to the rest of the pages and will be generated 
    // as well.
    content.programmatic.forEach((item) => {
      const synonyms = item.meta.en.columns[0].words;
      const firstType = item.meta.en.columns[1].words[0];
      synonyms.forEach((synonym) => {
        routesToGenerate.push(
          `/${slugify(synonym)}-for-${slugify(firstType)}`
        );
      });
    });

    return Promise.resolve(routesToGenerate);
  },
},
      

After all the hard work, all members @bcms team agreed on one: this was an excellent experience that allowed us to make more than 2k landing pages using programmatic SEO strategy and our headless CMS as a website builder. If you plan to leverage landing pages, our honest advice is to choose a programmatic SEO strategy. It is straightforward and to the point. You will see first results and growth for a short amount of time.

Programmatic SEO recap

  • Deep research and a detailed strategy are the keys to doing everything successfully.

  • Use modifiers and descriptive text on the page to avoid thin and duplicate content. 

  • Internal and external link building is imperative!

  • Make Google fall in love with you but at the same time give quality content to your audience. 

  • Don’t forget about URL structure because it provides link equity.

  • Sitemaps are a helpful tool to get a better ranking.

  • Use headless CMS because it is the best option to build such a large number of landing pages. 

  • Follow your content! Even when everything is done and published continuously, monitoring your content allows you to fix any common technical issues and update your content if needed. 

Need help? Contact us :)