Try the Keyword Combiner to do this in your browser.

Yes — exact duplicates are removed, with both kinds counted separately
Yes, duplicate keywords are removed when you use the Keyword Combiner — exact case-sensitive duplicates inside each input list are deduplicated before combination, and final phrases that collide after concatenation are deduplicated again, with both counts reported separately in the summary. The tool processes list A and list B independently, trims outer whitespace from each non-empty line, drops empty lines, and then collapses any line that is byte-identical to an earlier line in the same list while preserving the first occurrence it saw. After the Cartesian product is built, the output is scanned again: pairs that would produce the same final string are merged, and the duplicate count appears next to the unique output count. Nothing about this is hidden or silent, which is why the summary explicitly lists normalized list sizes, removed input duplicates, and removed output collisions. The deduplication is mechanical and string-based, so it does not treat Shoe and shoe as the same word, and it does not normalize synonyms, accents for matching purposes, or word order. Knowing exactly which passes ran and what each pass removed is the difference between trusting the output and guessing how clean it actually is.
What "duplicate" means inside the Keyword Combiner
The tool's deduplication is intentionally narrow. A line is considered a duplicate of an earlier line only when its trimmed string matches exactly, character for character, including case. That means running shoes and running shoes collapse to one entry, but Running Shoes, running shoes , and running shoes (with a trailing space) are handled in a defined order: each non-empty line is first trimmed at its outer edges, then compared to earlier trimmed lines in the same list. Whitespace-only differences inside the term are preserved as written. Punctuation, accents, emoji, and non-Latin scripts also remain unchanged.
Because matching is case-sensitive, Shoe and shoe remain distinct terms. If you have a reason to keep both variants — different match types, branded versus generic, deliberate A/B test cells — the tool will respect that. It will not silently fold them together, nor will it reorder, stem, or apply any other linguistic transformation.
Input duplicates versus output collisions
The Keyword Combiner runs two separate deduplication passes, and it counts them independently in the summary.
The first pass operates inside each input list. If you paste the same line twice in list A, the second appearance is discarded before any pairing begins. The count of removed input duplicates is one of the numbers you see after you run the tool, and it reflects cleanup of your pasted text — repeated terms, copy-paste artifacts, and lines you exported from two sources that overlap.
The second pass operates on the generated phrases. Sometimes two different input pairs can produce the exact same final string. The classic example is an empty separator: ab combined with c and a combined with bc both yield abc. With a space separator, red + shoes and red + shoes (note the extra space inside list B's term) would also collapse after trimming. The tool keeps the first output it generated and drops the later colliding output. The count of removed output collisions is reported as a separate field so you can tell at a glance whether your dedup activity came from messy input or from genuine combinatorial overlap.
| Property | Input duplicate removal | Output collision removal |
|---|---|---|
| Where it runs | Inside list A or list B, before pairing | On the final phrase set, after pairing |
| Match rule | Exact, case-sensitive string match after trim | Exact, case-sensitive string match on the joined result |
| How duplicates appear | Repeated lines in your pasted text | Different input pairs producing the same final phrase |
| Order behavior | First-seen occurrence kept | First-seen output kept |
| Reported where | Removed input duplicates summary field | Removed output collisions summary field |
| Typical cause | Paste error, merged source files, copy-paste artifacts | Empty or very short separator, overlapping string fragments |
How to combine two keyword lists and verify duplicate removal
- Open the Keyword Combiner in your browser tab — no upload or account required, and the lists never leave your device.
- Paste one keyword or phrase per line into list A. Repeat with list B for your modifier or second term list.
- Choose A-then-B or B-then-A order, and type the exact separator you want — space, hyphen, underscore, plus sign, or another short literal sequence of up to 20 Unicode code points.
- Run the combination to generate the complete pair set. The tool computes the theoretical pair count first and rejects the request above 10,000 pairs, so nothing is silently truncated.
- Read the summary panel: confirm normalized list sizes, theoretical input-pair count, removed input duplicates, removed output collisions, and the unique output count.
- If a removed-duplicates number is unexpectedly large, narrow the source lists before copying; if it is unexpectedly small, scan for repeated terms or colliding concatenations caused by your separator choice.
- Remove irrelevant candidates, then copy the deterministic one-per-line output for your spreadsheet, ad-group draft, content brief, or taxonomy review.
Because the order is stable, rerunning identical input yields identical text, which makes the output suitable for version comparison and deterministic tests. All combination logic runs in your current browser tab, and copying occurs only after you press the copy button.
Limits that interact with deduplication
A few hard limits shape how deduplication behaves in practice. Each non-empty line is trimmed and capped at 100 Unicode code points; control characters and Unicode line or paragraph separators are rejected outright. Each source editor accepts up to 100,000 UTF-16 code units and 500 unique terms per list, and these limits bound both the pasted text and the number of records processed. The pair budget is calculated before output deduplication, and requests above 10,000 input pairs are rejected outright with no partial output and no silent truncation. This matters for dedup because it means you cannot rely on a request that is nominally too large slipping through only because several later strings collided — the cap is checked first and the whole request fails.
If preserving every intended pair matters more than squeezing out every variant, the guide to building keyword combinations without losing any pair walks through the same pair budget and order controls from the opposite angle.
Why manual review still matters after deduplication
String deduplication is not keyword research. The Keyword Combiner will not flag red shoes and red shoe as duplicates, will not collapse buy shoes and shoes buy, and will not tell you that two different phrases target the same search intent. It also will not estimate search volume, competition, cost per click, language quality, or grammatical naturalness — those questions belong to a different stage of the workflow, and the tool is deliberately mechanical about not pretending otherwise.
Treat the deduplicated output as a clean candidate list. Before you paste it into an ad group, a content brief, or a taxonomy review, skim for terms that are irrelevant to your landing page, sound unnatural, carry trademark or policy risk, or duplicate an existing campaign term you forgot about. If demand matters, confirm it through a keyword-data source you trust. The dedup pass guarantees that you will not be reading the same phrase twice in the result, but it makes no promise about whether the surviving phrase is worth targeting.
For a deeper look, see Bulk Keyword Density Check for Long-Form Drafts.