I recently wrote a post about my experience and strategies for programmatic SEO, particularly with enterprise-level clients.
One of the sections was about dynamic text generation, and I thought I would expand upon this a bit as this offers quite a bit of value to larger sites, particularly when used correctly.
What is dynamic content generation?
Dynamic content generation is exactly that. Content that is generated dynamically.
This means that content is generated on the fly using rules and variables that are available for the specific page.
There is a manual text element that creates ‘content templates’, and then using rules and then dynamically insert variables to modify the content.
The content could be paragraphs of text, FAQ-style questions, or anything in between. Some full pages of content are generated dynamically!
Using rules inside dynamic content
Rules allow you to control when you show certain dynamic elements. This will make more sense with one of the examples below, but think about it being the same as IF formulas in Excel/Sheets.
If a variable EXISTS, EQUALS, is GREATER THAN, LESS THAN, DOES NOT EXIST, etc, use or don’t use a specific piece of text.
Using ecom as an example, lets say you have laptops with dedicated or integrated video cards.
Both have their own uses, and you would want to use a different piece of content for each.
So you could use something like the below (ideally not written by me though obviously… )
If GPU is Integrated:
Due to the integrated video card, you shouldn’t expect good video game performance
If GPU is Dedicated:
The dedicated video card offers better gaming performance.
The rules let you control if and when to use a piece of content, giving you unlimited possibilities for customising usable content, provided you put in the effort to build out the rules.
Dynamic content examples
To give a better overview of what dynamic content generation is, here are a few examples.
Dynamic content generation for products from specifications
If you’re doing this on a smaller scale, then you might like this post about product description generation with AI.
However, if you’re here because you’re trying to generate product descriptions programmatically, then you might need to take a slightly different approach.
Using the same example from that post though, let’s say you have the following specs for a product in a database;
Name: Acer 14″ Chromebook 714
Operating System: Chrome OS
Processor: Intel Pentium Gold 4417U
Screen Size: 13.5″
Installed RAM: 8 GB
GPU: Intel HD Graphics 610
Screen Size: 13.5″
You could manually use these for a product description, or you could take the top specs and come up with a template description and drop in the variables.
The <name> by <brand> is a <screenSize> <operatingSystem> laptop. It comes with <installedRam> of memory installed, and there’s an <processor> processor inside.
When used for the product with the specs above, you’ll get the following text:
The Acer 14″ Chromebook 714 by Acer is a 13.5″ Chrome OS laptop. It comes with 8 GB of memory installed, and there’s an Intel Pentium Gold 4417U processor inside.
You can then use rules to extend this out, and create specifics for different ram amounts, operating systems, processors etc, and really customise it to that product set.
There might only be a small handful of products that use some sentences for the description, but that’s the joy of it. You can really hone in on the specifics and go as unique with it as you want, to really change up the products.
Dynamic content generation for real estate
There are two main types of content you can generate for real estate, with the first being listings, and the other being the search result pages.
Most listings should come with a custom description from the real estate agent, but you may choose to still generate some dynamic text for the listing. You can just follow the product example for this, as there will be different specs you can use for the listing and craft a description off that.
The one that could really set you and your competitors apart is a search result description though.
This would essentially be a summary of the listing content, available for that specific search result page.
You’d think about all the variables you have for a listing, and then work out how to essentially summarise them to use on this search page.
So what variables from the listings do you have access to, that you could summarise?
We currently have <listingCount> listings for <channel> in <location>.
The most popular property type in <location> is <popularPropertyType> with <popularPropertyTypeListingsCount> <popularPropertyType> for <channel>.
Properties range from <lowMedianPrice> to <highMedianPrice> with an average of <averagePrice>.
The top areas of <location> that buyers are looking in are <popularArea1>, <popularArea2>, and <popularArea3>.
Most buyers are looking for <averageBedrooms> bedroom properties, and are filtering by <popularFilter1>, <popularFilter2>, and <popularFilter3>.
So many more could be used, and you could use rules to make it read more natural, but the above would still be better than nothing.
Dynamic content generation for user-generated content
User-generated content can sometimes be difficult to work with when it comes to programmatic SEO.
Why? Because you don’t control what the content is you’re getting.
You can control the quality, quantity, and what they give you.
However, you can try and persuade them to give you more defined info.
Think about categories, subcategories, and tags. The more you can steer the user into giving you information, the better, as you can better understand what their content is about.
However, fret not if you only have descriptions or very limited tags.
You can create your own.
You just list out a heap of ‘seed’ keywords, along with their associated categories, and have it run through the data. When certain words are found in the data, categorise them as a specific category.
You could have many seed keywords associated with a category too.
This is extremely customisable depending on the type of content you have, but think about all the variables you have, and then use these new tags you’ve added.
Content counts, types, words they’re using in the content, anything you can use from within the content.
You don’t need every piece of content to have something. If only 10% of your content has a specific element you can use, then use it. Don’t skip it because only 10% of you’re content has something.
As your site grows, that 10% will only get larger and larger anyway, and you’ll get more content from it.
Using spintax in dynamic content
Bringing back SEO strats from 2008, you could leverage spintax to try and add additional uniqueness to your dynamic text.
Since you’re heavily using variables, most the content will be unique anyway, but the addition of spintax could add an additional uniqueness level to the overall keyword templates.
Instead of having 20-30% of your descriptions being similar, you could drop that to only 5-10% with a few template variations, or even less if you’re rolling with sentence variations that then mix up amongst themselves.
Using the product description from earlier, you could have 3 versions of that first sentence.
The <name> by <brand> is a <screenSize> <operatingSystem> laptop.
Released by <brand>, the <name> is an <operatingSystem> laptop with a <screenSize> screen.
A <screensize> laptop released by <brand>, the <name> comes with <operatingSystem> installed.
Takes me back to the fun gamey days of SEO.
Spin those together, and you can really mix things up with the content generation.
The real challenge with leveraging spintax here is ensuring it doesn’t regenerate when you change an element.
You won’t to lock in the template version selection at the first generation, to ensure that every server-side load, or on content modification, the entire content element doesn’t change.
Just moving from 1 keyword template to another, could essentially act like ‘rewriting’ the entire page’s content.
Yeah, that could be beneficial. But you don’t know.
It could also constantly change the content too. Imagine Google getting a 66% of changing the content (if you have 3 templates) of the page each time it recrawls.
Things to remember with dynamic text
Know your data
One of the biggest things to remember with dynamic text is you don’t always know the variable’s content.
There could be so many different formats of data, that you really should expect the unexpected.
Vet your database.
Make sure you know what’s going to be included.
Let’s take a look at <installedRam>.
It comes with <installedRam> of memory installed.
Is that always in the format of x GB.
Will it sometimes just be x, leaving you with ;
It comes with 16 of memory installed.
Or could it be 16 GB memory, leaving you with;
It comes with 16 GB memory of memory installed.
Memory of memory.
Just know the different formats of your data, and you will know what to expect.
Preceding text of variables that start with a vowel
This one’s minor, but can really be the difference between human readable text, and obvious automatically generated text.
We could have <brand> that is either Apple, or Lenovo.
A <brand> laptop
Would become the following;
A Apple laptop
A Lenovo laptop
One of them works, one doesn’t.
So you either need to account for this in the template text, by ensuring no variations include templated text that could lead to this situation, by using things like ‘by <brand>’. That would ensure no scenarios like the above could happen.
Not every page needs every piece of text
You don’t need to go overboard with this. Keep it reasonable.
If you don’t have enough data for a page to use a template, then just don’t use it.
Use what you’ve got.
Wait until you have enough data for that page to use that template, and use it then.
Build this text in a way that as your business & website grows, the content grows with your automatically.
When it’s right, its right
Dynamic content can be powerful, when used correctly.
Keep it simple to start, learn what you need, and go from there.
You can build these content sections out as you go.
You can also now use my Google Sheets dynamic content generator to kick you off.