If you run Google Ads, you have almost certainly seen dynamic keyword insertion recommended as a way to make your landing pages match what somebody searched for. Most guides on the topic get one important detail wrong, and it is the detail that decides whether your setup works at all.
This guide covers what DKI actually does, the exact syntax Google supports, how to pass the triggering keyword through to your landing page in the URL, how to swap the copy on the page once it arrives, and where keyword level personalization runs out of road for B2B. Everything about Google's behaviour here is sourced to Google's own documentation.
The short answer
Dynamic keyword insertion in Google Ads is an ad text feature. It rewrites your headlines, description lines, and display paths. It does not touch your landing page. Google's setup guide lists headlines, description lines, and display paths as the fields that support keyword insertion, and states that customizers cannot be used in the Final URL field (Set up keyword insertion for your ad text). Google also notes that keyword insertion shows the keyword from your ad group in the creative, not the visitor's search term (About keyword insertion for your ad text).
Changing the words on your landing page takes two separate pieces. First, the ValueTrack {keyword} parameter appended to your Final URL or Final URL suffix, so the triggering keyword arrives in the query string of the page the visitor actually loads. Second, dynamic text replacement on the page itself, which reads that parameter and swaps the copy. DKI handles the ad. ValueTrack plus dynamic text replacement handles the page. If a guide tells you to paste {Keyword:default text} into your landing page HTML, it is describing something that does not exist. If you want the page side handled for you rather than hand rolled, book a demo of Abmatic AI and we will show you the swap running live on your own site.
What is dynamic keyword insertion and how does it work?
Dynamic keyword insertion (DKI) is a Google Ads feature that swaps a placeholder in your ad text for the keyword in your ad group that triggered the ad. You write the placeholder once, and a single ad can render as dozens of keyword specific variants without you writing dozens of ads.
Here is the sequence. Somebody types a query. Google matches that query to one of the keywords in your ad group. Your ad renders, and the placeholder is replaced with the matched keyword. Two things about that sequence matter and are usually glossed over:
-
It inserts your keyword, not their query. If your ad group keyword is "used cars" and somebody searches "cheap used cars near me under 5000", the ad shows "used cars". This is the single most common misconception about DKI and it changes how you should structure ad groups.
-
It stops at the ad. The click then goes to whatever Final URL you configured. Nothing about DKI rewrites the page at the other end of that click.
So for a car dealership with the keyword "used cars", a headline written as Buy {KeyWord:Cars} renders as "Buy Used Cars" in the ad. The landing page still says whatever it said before, unless you build the URL and page side described further down. That gap between a keyword matched ad and a generic page is exactly where PPC conversion rate quietly leaks.
The exact DKI syntax, capitalization, and character limits
The manual form is {keyword:default text}. In the Google Ads editor you can also type an opening brace, pick Keyword insertion from the dropdown, and set the default text and capitalization from the panel. The capitalization of the word "keyword" inside the braces is not cosmetic, it controls how the inserted keyword is cased. These are Google's own variants and examples:
| What you type | How the inserted keyword is cased | Google's example output |
|---|---|---|
{keyword:Chocolate} | All lower case | dark chocolate |
{Keyword:Chocolate} | Sentence case, first letter of the first word only | Dark chocolate |
{KeyWord:Chocolate} | Title case, first letter of every word | Dark Chocolate |
{KEYWord:Chocolate} | First word fully capitalized | USA Chocolate |
{KeyWORD:Chocolate} | Last word fully capitalized | Chocolate Made In USA |
The text after the colon is your default. It renders whenever the keyword cannot be inserted, which happens more often than people expect. Google's setup guide is explicit that the default text has to be short enough to keep the ad inside its limits: 30 characters per headline, 90 per description, and 15 per display path. If the inserted keyword plus the surrounding copy would break those limits, the insertion does not happen and the default runs instead. Those are the same limits that apply to responsive search ads generally, where you can supply up to 15 headlines and 4 descriptions (About responsive search ads).
Two more constraints worth writing on a sticky note. Keyword insertion is not available for Dynamic Search Ads, because DSA does not use keyword targeting. And whatever gets inserted still has to comply with Google Ads policy, so a keyword you would not have written into the ad by hand is a keyword you should not let DKI write for you.
The benefits of using dynamic keyword insertion in your landing pages
Used properly, and paired with the URL and page work below, keyword level matching earns you four things on a Google Ads campaign:
-
Better ad relevance. Ad relevance is one of the three components Google reports in Quality Score, alongside expected clickthrough rate and landing page experience. Getting the keyword into the headline is the most direct lever you have on it.
-
Higher clickthrough rate. When the headline echoes the phrase somebody just typed, the ad reads as the answer rather than as an option. That lifts expected clickthrough rate, the second Quality Score component.
-
Message match through to the page. If, and only if, you also do the URL and dynamic text replacement work, the headline on the page repeats the ad. That continuity is what protects landing page experience, the third component.
-
Far fewer assets to maintain. One ad and one page can serve a whole tightly themed ad group instead of one static PPC landing page per keyword variant.
One correction to a claim you will see repeated everywhere: Quality Score itself is not a live input to the ad auction. Google describes it as a diagnostic tool for understanding how your ads affect the user experience, not as a number the auction reads (About Quality Score). Treat a Quality Score lift as a signal that relevance improved, not as the mechanism that lowered your cost.
How to set up dynamic keyword insertion in Google Ads
Setting up DKI on the ad side takes about ten minutes:
-
Tighten the ad group first. DKI is only as good as the keyword it inserts. Split anything loosely themed so every keyword in the ad group could plausibly appear in the same headline.
-
Open the ad and place the placeholder. In a headline, type an opening brace and choose Keyword insertion, or type
{KeyWord:Default Text}manually. -
Write a default that stands on its own. The default is not a fallback nobody sees. On long keywords and blocked insertions it is the ad. Make it a real headline.
-
Check the fields you used. Headlines, descriptions, and display paths are supported. The Final URL is not, so do not try to put the placeholder there. Passing the keyword to the page is a different job, covered next.
-
Set up tracking. Use a tracking template and UTM parameters so you can tell keyword matched traffic apart from everything else in analytics and in your CRM.
-
Preview before you launch. The Ad Preview and Diagnosis tool renders the ad the way a searcher will see it, including the inserted keyword.
-
Watch the losers, not just the winners. Sort by keyword and look for the ones where the default is firing because the real keyword is too long. Those are the ones to rewrite.
Adwords keyword destination URL: passing the keyword to your landing page
This is the part that the question "how do I insert keywords dynamically in a landing page" is really asking about, and it has nothing to do with DKI syntax.
First, a naming note, because the old vocabulary still shows up in search. The legacy AdWords "destination URL" field no longer exists as such. Google replaced it with the Final URL plus a separate tracking template (Learn about final URLs and tracking templates). So when older articles tell you to put {keyword} in your destination URL, the modern equivalent is the Final URL or the Final URL suffix.
The parameter you want is the ValueTrack {keyword} parameter. Google defines it, for the Search Network, as the keyword from your account that matched the search query, and warns that it returns a blank value when the ad matched without keywords, which includes Dynamic Search Ads, Performance Max, and AI Max for Search campaigns (Set up tracking with ValueTrack parameters). If most of your budget sits in Performance Max, keyword driven page copy is simply not available to you, and you should skip to the account based approach further down.
Where you put the parameter decides whether your landing page can read it:
| Where you put it | Does the landing page receive it | Use it for |
|---|---|---|
Final URL, for example https://example.com/lp?kw={keyword} | Yes. It is part of the URL the browser loads. | Parameters that change what the page shows. Google calls these content modifying parameters and says they belong in the Final URL. |
| Final URL suffix | Yes. Google's own example is a suffix of x=y producing https://example.com/?x=y in the browser (Add a Final URL suffix). | Adding the same parameter across many ads without editing every Final URL. |
| Tracking template | Not reliably. With parallel tracking on, the visitor goes straight to the Final URL while the tracking URL loads in the background. | Click measurement and third party redirects, not page copy. |
Custom parameter, for example {_kw} | Only if you also reference it in a field the browser loads. | Reusing one value across templates and suffixes. |
The practical setup for most accounts: leave the tracking template for measurement, and add kw={keyword} to the Final URL suffix at campaign level. Every ad in the campaign then delivers the keyword to the page with no per ad editing, and it survives parallel tracking. Confirm it by clicking your own ad from the Ad Preview tool and reading the address bar on the page you land on.
One more detail that trips people up: if your Final URL contains an anchor or an AJAX fragment, Google tells you to put tracking parameters in the Final URL behind an {ignore} tag, otherwise the fragment swallows them (About URL parameters).
Dynamic text replacement: swapping the copy on the landing page
Once ?kw=used+cars is in the address bar, something on the page has to read it and rewrite the headline. That mechanism is called dynamic text replacement (DTR), and it is a landing page feature, not a Google Ads feature.
The pattern is always the same. Mark the elements that should change, read the parameter, validate it, and fall back to your default when it is missing or fails validation. Hand rolled, it looks roughly like this on the page:
const params = new URLSearchParams(window.location.search);
const kw = (params.get('kw') || '').trim();
const allow = /^[a-z0-9 +&'-]{1,60}$/i;
document.querySelectorAll('[data-dtr]').forEach(function (el) {
el.textContent = allow.test(kw) ? kw : el.dataset.dtr;
});
Two things in that snippet are not optional. Use textContent, never innerHTML. Writing a raw URL parameter into innerHTML is a textbook reflected cross site scripting hole, and it is the single most common security defect in home grown DTR. And keep the allowlist regex, because {keyword} returns blank on Performance Max and DSA traffic, and a headline that renders as an empty string is worse than a generic one.
If you would rather not maintain that, the mainstream landing page builders ship DTR natively. Unbounce documents it as tailoring page text to keyword parameters attached to the URL (Unbounce documentation), and Instapage sells it as personalizing page content from URL parameters (Instapage feature page). Both are solid for the keyword slice of the problem.
Whichever route you take, treat it as a test rather than a truth. Run the DTR version against the static version with proper A/B testing before you roll it across the account, because keyword echoing helps far more on some queries than others. Abmatic AI runs the swap and the test in the same layer, so the variant that wins is the variant that ships. You can see that on your own pages in a 15 minute demo.
Not ready to talk to anyone yet? See what the platform actually does, or look at what it costs.
Skip the manual work
Abmatic AI runs targets, sequences, ads, meetings, and attribution autonomously. One platform replaces 9 tools.
See the demo →Best practices for using dynamic keyword insertion effectively
DKI rewards discipline and punishes sprawl. The practices that hold up:
-
One theme per ad group. Every keyword in the group should read naturally in the same sentence. If two keywords need different headlines, they need different ad groups.
-
Write the default first. Draft the ad as if insertion will never fire, then add the placeholder. That guarantees the fallback is a real headline rather than filler.
-
Budget your characters. Take your longest keyword in the group, add the surrounding copy, and count. If it clears 30 characters in a headline, insertion will not fire on your most specific term, which is usually your best term.
-
Test DKI against a static control. Compare clickthrough rate, conversion rate, and cost per conversion, not clickthrough rate alone. Keyword echoing reliably lifts clicks and does not always lift conversions.
-
Carry the match through to the page. An ad that says "used cars" pointing at a page that says "welcome to our dealership" spends the relevance you just bought. Either do the URL plus DTR work, or do not bother with DKI.
-
Segment the reporting. Tag keyword matched sessions so you can see downstream pipeline, not just form fills. This is where most PPC reporting stops and where turning PPC traffic into identified accounts starts.
How to avoid common pitfalls when using dynamic keyword insertion
These are the failure modes that show up in real accounts:
-
Inserting a competitor or trademarked term. If a competitor brand name is a keyword in the ad group, DKI will happily put it in your headline. That is a policy and legal exposure, not a clever tactic. Keep brand terms in their own ad groups with static copy.
-
Inserting your own misspellings. Broad and phrase keywords you added to catch typos get inserted verbatim. The ad then advertises the typo.
-
Assuming the search term appears. It does not. Google inserts the ad group keyword, not the query. If you need the query itself, DKI is the wrong tool.
-
Silent truncation. Insertion simply does not fire when limits are exceeded, so the default runs and nothing warns you. Audit which keywords are actually rendering.
-
Blank
{keyword}on keywordless campaigns. Performance Max, Dynamic Search Ads, and AI Max return an empty value. Any DTR without a fallback ships an empty headline to that traffic. -
Unescaped parameters on the page. Reflected cross site scripting via an unvalidated
kwparameter is a real vulnerability, and a landing page is still your domain. -
Thin doorway pages. Spinning up near identical keyword pages that differ only by a swapped noun is the pattern search engines treat as doorway content. Personalize the copy, not the page inventory.
Get all seven right and DKI is a genuinely useful lever. Get the last two wrong and you have bought yourself a security ticket and an indexation problem.
Examples of successful campaigns using dynamic keyword insertion
Rather than repeat the unsourced percentage lifts that circulate on this topic, here are the three campaign structures where keyword insertion earns its keep, and the mechanism behind each:
-
High variation, low intent difference. A dealership bidding on "used cars", "second hand cars", and "pre owned cars" is fielding three phrasings of one intent. DKI mirrors the searcher's vocabulary while the offer stays identical, so the ad reads as a precise match without any change to the underlying page value.
-
Long catalogue, shallow depth. A fitness brand with dozens of programme keywords cannot justify a page per programme. Keyword insertion in the ad plus DTR on one well built page covers the catalogue without spawning dozens of thin pages.
-
Regulated or sensitive categories. Here the value of DKI is inverted: the default text is the point. A healthcare advertiser writes a compliant, approved default and uses insertion only for the small allowlist of terms that clear review.
The one thing all three share is that the ad and the page say the same thing. That is the whole mechanism. Everything else in this article exists to make that sentence true.
Where keyword level personalization stops working for B2B
Keyword insertion assumes the keyword tells you who the visitor is. In B2C that is often close enough. In B2B it usually is not. "Data warehouse pricing" is typed by a 40 person startup and by a 12,000 person bank in the same hour, and they need different pages, different proof, and different follow up. The keyword is identical. The buyer is not.
The upgrade is to personalize on the account rather than on the string. Instead of asking what did they type, you ask which company is this, what stage are they at, what have they already read, and what is their tech stack. That requires account-level deanonymization of anonymous traffic, an identity graph to hang it on, and a personalization layer that can act on it in the same session. Search keyword is then one signal among many, not the whole basis of the experience.
Abmatic AI is the most comprehensive AI-native revenue platform on the market, and this is the specific problem it was built for. It collapses the 8 to 12 point tools that mid-market and enterprise B2B teams buy separately into a single platform with one identity graph and one shared signal layer. Most vendors in the ABM category cover 3 to 5 of the dimensions below. Abmatic AI covers all of them first party.
| Capability | In a DKI plus landing page builder setup | Abmatic AI, first party |
|---|---|---|
| Web personalization | Swaps marked text from a URL parameter | Full web personalization by firmographic, account stage, and intent signal, with a visual editor and a JSON API. See it on your site. |
| A/B testing | Available in the page builder, separate from the ad platform | Multivariate testing across web, email, and ads, sharing the same personalization layer |
| Banner pop-ups and on-site CTAs | Usually a separate overlay tool | Targeted overlays, banners, and inline CTAs gated by account or persona signal |
| Account list building | Outside the toolchain | Build a target account list from firmographic, technographic, and intent filters against a first-party database |
| Contact list building | Outside the toolchain | Build a contact list at scale from the same first-party database, export ready and sync ready |
| Account-level deanonymization | Not part of it. You know the keyword, not the company. | Identify the companies behind anonymous site traffic, including your paid search traffic |
| Contact-level deanonymization | Typically a bolt-on identity vendor | Identify the individual people behind anonymous traffic natively, with no supplementary vendor |
| Search and display advertising | Google Ads only, managed separately | Google Search ads management plus a native Google DSP buy, both targeted by your Abmatic AI account list |
| Social advertising and retargeting | Separate ad managers per channel | Native LinkedIn Ads and Meta Ads plus retargeting, all driven from the same account list |
| Intent data | Keyword match type is the only proxy | first-party intent captured across web, LinkedIn, paid ads, and email, layered with third-party intent |
| Technology detection | Outside the toolchain | Detect a prospect's tech stack on domain and use it for targeting and message personalization |
| Agentic Workflows | Zapier style glue between the ad platform and the page builder | If this then that autonomous agents that act across the platform, for example hit an intent threshold, enroll the account in a sequence, show a personalized banner, and alert the AE |
| Agentic Outbound | Outside the toolchain | Signal-adaptive copy, persona-aware cadence, and autonomous send time and channel decisions |
| Agentic Chat | Usually a separate conversational AI product | Live-site conversational AI that already knows the account, the contact, and the intent behind the visit |
| AI SDR and meeting routing | A separate scheduling and routing tool | Inbound and outbound qualified meetings auto-routed to the right AE, with native calendar booking |
| CRM sync | Form fill posts to the CRM | Full bi-directional Salesforce and HubSpot sync across accounts, contacts, deals, lists, workflows, and campaigns |
| Analytics and attribution | Ad platform reporting plus a BI tool | Built-in pipeline, attribution, and account journey reporting, no separate BI layer required |
| Time to value and pricing | Days per tool, priced per tool | Pixel live and capturing signal the same day. Starting at $36,000/year, with enterprise tiers available. Book a demo. |
None of that replaces keyword insertion. Keep DKI doing what it is good at, which is making the ad match the query. Add account level personalization underneath it so the page can match the buyer, which the keyword alone can never tell you. If you want the shape of that in practice, website personalization for advertising walks through it, and personalizing PPC ads covers the ad side.
Tools and resources to help you implement dynamic keyword insertion on your landing pages
A short, honest list. Note that there is no standalone "Google Ads keyword insertion tool" as a separate product, despite what several older articles claim. The insertion UI is built into the ad editor.
-
The Google Ads ad editor. Type an opening brace in any headline or description and choose Keyword insertion. This is the primary interface and it handles capitalization and default text for you.
-
Google Ads Editor. The free desktop application for bulk editing. Useful when you are adding placeholders across hundreds of ads at once.
-
Ad Preview and Diagnosis. Renders your ad with insertion applied, which is the only reliable way to catch a default firing when you expected the keyword.
-
Google's ValueTrack documentation. The authoritative list of what each parameter returns and where it returns blank.
-
A landing page builder with native DTR, such as Unbounce or Instapage, if the keyword slice is all you need.
-
A personalization platform, if you need the page to respond to who the visitor is rather than what they typed. That is the Abmatic AI case, and the fastest way to evaluate it is a live demo against your own traffic. Related reading: growth marketing through Google Ads and website personalization best practices.
Frequently Asked Questions
What does DKI mean in Google Ads?
DKI stands for dynamic keyword insertion. It is a Google Ads feature that replaces a placeholder in your ad text with the keyword from your ad group that triggered the ad. You write it as {keyword:default text}, and the capitalization of the word "keyword" inside the braces controls the casing of what gets inserted.
Does dynamic keyword insertion work on landing pages?
No, not by itself. Google's documentation lists headlines, description lines, and display paths as the supported fields and states that customizers cannot be used in the Final URL field. Putting {Keyword:default} into your landing page HTML does nothing. Landing page text changes require the ValueTrack {keyword} parameter in the URL plus dynamic text replacement on the page.
How do I insert keywords dynamically in a landing page?
Add kw={keyword} to your Final URL or, better, to the campaign level Final URL suffix so the keyword arrives in the query string of the page the visitor loads. Then add dynamic text replacement on the page that reads that parameter, validates it against an allowlist, writes it with textContent rather than innerHTML, and falls back to a default when the parameter is missing.
What was the AdWords keyword destination URL and does it still exist?
The destination URL was the old AdWords field that held both the landing page address and any tracking parameters. Google replaced it with the Final URL plus a separate tracking template. Advice to "put the keyword in your destination URL" now translates to putting kw={keyword} in the Final URL or the Final URL suffix, not in the tracking template, because with parallel tracking the visitor goes straight to the Final URL.
Does DKI insert the keyword or the search term?
The keyword. Google inserts the keyword from your ad group that matched the query, not the query the person typed. If your keyword is "used cars" and somebody searches "cheap used cars near me", the ad renders "used cars". This is why tightly themed ad groups matter so much with DKI.
Does the {keyword} parameter work in Performance Max and Dynamic Search Ads?
No. Google states that {keyword} returns a blank value when the ad matched without keywords, which covers Dynamic Search Ads, Performance Max, and AI Max for Search. Keyword insertion in ad text is also unavailable for Dynamic Search Ads. Always ship a fallback in your page code, or keywordless traffic will see an empty headline.
Does dynamic keyword insertion improve Quality Score?
It can improve two of the three reported components, ad relevance and expected clickthrough rate, and the page side work can help the third, landing page experience. Note that Google describes Quality Score as a diagnostic tool rather than a direct input to the ad auction, so treat an improvement as evidence that relevance went up, not as the mechanism that lowered your cost per click.
What is the character limit for keyword insertion?
The limits are the standard ad text limits: 30 characters per headline, 90 per description, and 15 per display path. Both the inserted keyword and your default text have to fit inside them. When the combination would exceed the limit, insertion does not fire and the default text is used instead.
Is a dedicated keyword landing page still worth building?
For a small number of genuinely distinct intents, yes. For dozens of near identical keyword variants, no. Spinning up near duplicate pages that differ only by a swapped noun is the doorway page pattern, and it is fragile. One strong page with dynamic text replacement, or account level personalization for B2B, covers the same ground without the page sprawl. Book a demo if you want to see the account level version on your own pages.
Final thoughts
Dynamic keyword insertion is a good feature that is described badly almost everywhere. It rewrites your ad, not your page. Once you separate those two jobs, the whole workflow becomes clear: use {KeyWord:Default Text} to make the ad match the query, use the ValueTrack {keyword} parameter in the Final URL or Final URL suffix to carry that keyword across the click, and use dynamic text replacement on the page to finish the match. Write a default that works on its own, respect the 30 and 90 and 15 character limits, validate the parameter before you render it, and never assume it will be populated on keywordless campaigns.
Then be honest about the ceiling. Keyword text tells you what somebody typed. In B2B it does not tell you who they are, how big they are, what they already use, or whether they are in a buying cycle. That is what account level personalization is for, and it is where the compounding returns live once the keyword work is done. Related reading on the segmentation side: customer journey mapping in segmentation and lead generation through SEO.
Want your landing pages to respond to the company behind the click, not just the keyword? Book a demo of Abmatic AI.



