
In this post:
Dynamic content is any part of an email, landing page or website that changes depending on who is looking at it, based on data you hold about that person or visitor, while the rest of the asset stays the same. You build one version with moving parts, and each reader gets the combination that fits them.
In a go-to-market team that usually looks quite ordinary. A prospect in logistics gets the logistics case study in the middle of an email that everyone else receives with a SaaS example. A visitor who clicked an ad for your RevOps offer lands on a headline about RevOps. An existing customer sees "talk to your account manager" where a stranger would see "book a demo".
Where it goes wrong is rarely the technology. Teams start with what the tool can vary instead of what the reader needs to see, or they build an industry block for every sector on a field that most records leave blank. The result is that the default version, the one nobody spent much time on, is what most people actually receive.
TL;DR
Dynamic content runs on two mechanisms. Merge fields drop a single value into the text, and conditional blocks swap whole sections by rule. Every rule needs a default for people who match nothing, and that default deserves your best writing.
On a website you can only personalize on what you know. HubSpot's smart content can target anonymous visitors by country, device, referral source, ad source, URL parameters and browser language, while list membership and lifecycle stage only work for contacts it already recognizes.
Personalized landing pages for outbound and ABM work through URL parameters or per-account pages. Google mostly crawls from US addresses without your cookies, so it indexes the default version, which has to stand on its own.
In email there are no anonymous readers, so the useful rules are segment rules: proof by industry, a call to action by lifecycle stage. HubSpot email modules support exactly those two kinds, and cold email tools like lemlist do the same with if-then conditions on lead fields.
Prefer content that is settled at send time. Open-time tricks like live images are less predictable than they look, since Apple Mail fetches remote content in the background and hides the reader's IP address.
The data sets the ceiling. Check how many records have a field filled before writing a block that depends on it, and enrich the gaps first.
Keep the number of versions small and preview them as real records, including records with empty fields. Each extra rule multiplies what has to be checked.
Merge fields, conditional blocks and the default version
Every piece of dynamic content comes down to two moves.
A merge field is a placeholder that gets replaced with a value from the record at send time or page load. The company name, the city, the name of the account manager. It changes a word or a phrase.
A conditional block is a whole section with a rule attached. If the contact's industry is logistics, show the logistics proof paragraph. If their lifecycle stage is customer, swap the demo button for a support link. In cold email tools this is often written as a condition right in the template. lemlist's guide to Liquid syntax describes it as writing one email that adapts content to lead attributes like job title or company type, with conditions of the form {% if position == "founder" %} around the text that should only appear for that group.

Everything else is a variation on these two. A third, newer layer adds generated text, where an AI personalization engine writes a line per person from enriched data and pushes it into the template as just another merge field. Mechanically it's still a placeholder being filled.
The part people underrate is the default. Whenever a rule doesn't match, because the field is empty or holds a value you didn't plan for, the reader gets the fallback. If your industry field is filled for a minority of records, the fallback is the email most of your list receives. We write the default first, make it good enough to send on its own, and only then add the variations.

Dynamic content on your website
On a website, the question is always what you know about the visitor at that moment, and for most visitors the honest answer is very little.
HubSpot's smart content rules are a clear example of the limits. For anyone, including anonymous visitors, you can vary content by country (from the IP address), device type, referral source, ad source, URL query parameters and browser language. Rules for contact list membership and lifecycle stage only apply to visitors HubSpot can match to a known contact through its tracking cookie. Smart content on website and landing pages needs Content Hub Professional or Enterprise, and when a visitor matches several rules, they see the first one in the list, so the order of your rules matters.
That split shapes what's worth building. For known contacts, the strongest uses are about where they are in the relationship. A lead who already booked a demo shouldn't keep seeing "book a demo". A customer reading a pricing page should see an upgrade path, not the starter plan. These are cheap to set up and remove the small mismatches that make a site feel like it doesn't know you.
For anonymous visitors, company-level data can fill some of the gap. A reverse IP lookup can name the company behind many business visits, and with that you can show industry-specific proof or flag the visit to sales. How reliably that works depends on the provider and on how many of your visitors browse from an office network, so treat it as a bonus rather than the foundation of the page.
Personalized landing pages for outbound and ABM
Outbound gives you something inbound rarely does: you control the link. That makes landing page personalization much more dependable, because you don't have to guess who the visitor is.
The simplest version adds a URL parameter to the link in your email, something like ?industry=logistics, and uses a query parameter rule to swap the headline and proof on the page. The more involved version builds a page per target account, with their name, their use case and a relevant customer story, which is common in account-based marketing. The values for either usually come from the same research table that feeds the emails, often built in Clay.
Two search-related points are worth settling before you build. First, Google's documentation on locale-adaptive pages notes that Googlebot's default crawler addresses appear to be in the USA, and the crawler is never one of your known contacts. Whatever your page shows a visitor who matches no rule is the version that gets indexed, so that version has to be complete. Second, Google's spam policies treat showing search engines different content from users, with the intent to manipulate rankings, as cloaking. Varying a page for visitors based on their data is a different thing from serving the crawler a special version, and only the second is what that policy is aimed at.
Per-account pages raise a third question, which is whether they should be indexed at all. Usually they shouldn't. A page with a prospect's name on it is meant for one buyer, not for search.
Swapping email blocks by segment
Email is where dynamic content gets used most, and where it's easiest to overbuild.
In email every reader is a known record, so the rules work on what you hold about them. HubSpot's marketing email modules accept rules for list membership and lifecycle stage only, because device or referral source mean nothing for someone you're emailing. That restriction is a useful hint about what works: dynamic email content is strongest at the segment level.

The blocks we see paying off in B2B are concrete ones. A proof paragraph that matches the reader's industry. A call to action that changes with lifecycle stage, so a cold lead gets a guide, an engaged lead gets a meeting link and a customer gets nothing salesy at all. An event invitation that only appears for contacts in the region where the event is held. Each of these is one rule with a clear reason, and each can be tested by comparing replies or clicks between the people who saw it and those who didn't, the same discipline as A/B testing in cold email.
Per-person lines are a different job. An opening sentence about a prospect's new role or their hiring plans is closer to personalization at scale than to segment blocks, and it usually gets written upstream, by a researcher or a model, before landing in the template as a merge field. Done with rich data, that's what people mean by hyper-personalization. It's worth keeping the two layers distinct in your setup, because they fail differently: a broken block shows the wrong section, a broken line says something untrue.
Dynamic content also gets mixed up with its neighbours. AI copywriting generates new wording, spintax varies wording at random to avoid identical sends, and dynamic content picks what each reader sees based on their data. A cold sequence can use all three, but only dynamic content is about relevance.

The same logic carries through a whole email sequence, so step four can still reference the reader's segment, and into a multi-channel outreach motion where the landing page matches the email that sent people there.
Send time or open time?
Most dynamic email content is resolved when the email is sent. The values are merged, the blocks are chosen, and the finished message goes out. A smaller group of tools resolve content when the email is opened, usually by serving a live image, for things like countdowns or current stock levels.
Open-time content is less predictable than it sounds. Apple's Mail Privacy Protection notice explains that Mail downloads remote content on its own as standard, without waiting for the reader, and hides their IP address. For those readers, a "live" image may be generated around delivery rather than when someone actually looks at it, and any rule based on their location will be working from a relay address. For most B2B GTM work, send-time content built on good CRM data is both simpler and more reliable.
Why does the data decide how far you can go?
A rule can only be as right as the field it reads. If the industry field is wrong, the logistics prospect gets the healthcare case study, which is worse than the generic version because it shows you tried and got it wrong.

So before writing any block, check two things about the field behind it. How many records have it filled, and how many of those values are trustworthy and consistent. An industry field holding "Logistics", "logistics & transport" and "3PL" is three segments as far as a rule is concerned. Standardize the values, then fill the gaps with data enrichment, and only then decide which segments are big enough to deserve their own block.
The fields that work best are the stable ones. Firmographic data like industry, company size and region changes slowly and can be checked. Lifecycle stage is maintained by your own CRM. Fields guessed from a single page visit or an old form fill are much shakier, and we wouldn't hang a whole section of an email on them.
Testing every version of your dynamic content before it sends
Dynamic content multiplies versions faster than people expect. Three industry blocks, two calls to action by stage and a regional event block already make twelve possible emails, and someone needs to have looked at all of them. This is the check we run before anything goes out:
Write down every rule and count the combinations. If the number makes you wince, cut rules until it doesn't.
Preview the email or page as real records from each segment, not as an imaginary perfect contact.
Preview as records with empty or odd values, so you see the default and catch broken spacing or a stray "Hi ,".
Send real test emails where the preview can't help. HubSpot, for example, needs a test send to check smart subject lines.
Check the rule order on pages where a visitor can match more than one rule.
A month after launch, look at which blocks were actually shown. A block almost nobody received is maintenance cost with no benefit.

Then read a few finished versions out loud as if you were the recipient. The seams between blocks are where dynamic content starts to sound assembled, and reading is the only test that catches them.
The bottom line
Dynamic content is a small set of mechanics, merge fields, conditional blocks and a default, applied to a question no software can answer for you: what does this particular reader need to see? The teams that get value from it answer that question per segment, keep the rules few, and put real effort into the version people get when no rule applies.
It also sits downstream of everything else. A rule can't beat the CRM field it reads, a landing page is no more relevant than the research behind its link, and an email is no sharper than the angle someone chose for it. So treat it as one part of how your GTM stack fits together, not a feature you switch on, and give it more care the further you scale automated prospecting across thousands of contacts.
When we build it for a client, the fields, rules, templates and pages are set up in the client's own HubSpot, Clay and sending tools, with a short note on what each rule is for. The team can then add, change or retire rules on their own.
Frequently asked questions
What is the difference between dynamic content and static content?
Static content is the same for everyone who sees it: one email, one page, one version. Dynamic content keeps a shared structure but changes parts of it for each reader, using data such as industry, lifecycle stage or the link they clicked. Static is simpler to build and check, so it's the right choice when your audience is narrow. Dynamic content is worth the extra work when one asset has to serve clearly different groups.
How is dynamic content different from spintax and AI copywriting?
They solve different problems. AI copywriting generates new wording from a prompt and context. Spintax rotates synonyms and phrasings so a batch of emails isn't word-for-word identical. Dynamic content decides which predefined text, blocks or values each reader sees, based on data about them. A cold email sequence can combine all three, for example an AI-written opener inserted as a merge field inside a template with conditional blocks.
Is dynamic content the same as personalization at scale?
Not quite. Personalization at scale is the goal of making outreach relevant to each prospect across a large list. Dynamic content is one of the mechanisms used to get there, mainly at the segment level, such as proof by industry or a call to action by stage. Per-person lines about someone's role or company news are usually researched or generated first, then placed into the template through a merge field.
Does website personalization hurt SEO?
Not if the default version of the page is complete. Search engine crawlers don't arrive as your known contacts, so they see whatever a visitor gets when no rule matches, and that's the version that gets indexed. Problems start when you deliberately show crawlers different content from what users see, which Google treats as cloaking. Pages built for one target account usually shouldn't be indexed at all.
What is smart content in HubSpot?
Smart content is HubSpot's name for dynamic content. On pages it can change modules, text or calls to action based on a visitor's country, device, referral source, ad source, URL parameters, browser language, list membership or lifecycle stage. In marketing emails it's limited to list membership and lifecycle stage. Pages need Content Hub Professional or Enterprise, and emails need Marketing Hub Professional or Enterprise.
Can you use dynamic content in cold email tools?
Yes. Most cold email platforms support custom variables, and several support if-then conditions. lemlist, for example, uses Liquid syntax so a sentence only appears for leads with a particular job title or company type. The values usually come from a research or enrichment table, often built in Clay, and get pushed into the sequencer as columns. Always set a fallback for leads where the field is empty.
What happens when a merge field is empty?
Without a fallback, the reader sees a gap or a broken sentence, such as "Hi ," or "companies like in your sector". Most tools let you set a default value for each field, and conditional blocks should always have a default version. Check how many records have the field filled before relying on it. If most are empty, the fallback is effectively your main message and should be written with that in mind.
Does dynamic content work for inbound leads as well as outbound?
Yes, and inbound is often the easier place to start because the data already sits in your CRM. Nurture emails can change their call to action with lifecycle stage, so a new subscriber gets a guide and a sales-ready lead gets a meeting link. On your site, known contacts can see content that matches where they are, and customers stop seeing offers aimed at first-time visitors.
Does dynamic content on a website need cookie consent?
Some of it does. Rules that recognize a known contact rely on a tracking cookie, and in the EU, cookies that aren't strictly necessary generally need the visitor's consent. Visitors who decline will see your default version, which is another reason to make it strong. Rules based on the page URL, such as a parameter in an outbound email link, don't depend on that tracking cookie.
How many versions of one email is too many?
There's no fixed number, but every rule multiplies the versions someone has to check. Three industry blocks and two calls to action already make six combinations, and adding a regional block can double that. A practical limit is the number you can preview properly before each send. If a block reaches only a small slice of the list, fold it back into the default.
Share this post
Personalization
Glossary
Related glossary items
Understanding the core GTM concepts
Ready to build your pipeline











