The Keyword Combiner iterates two lists in first-seen order and lets you lock the outer and inner loop with an A-then-B or B-then-A toggle, so the phrase order is determined entirely by the order of lines you paste, the loop you choose, and the separator you type — nothing else. Because every combination is computed by walking the outer list top-to-bottom and pairing each term with the inner list top-to-bottom, pasting the same two lists in the same order with the same toggle and the same separator always reproduces the same one-phrase-per-line output. Empty lines are ignored, exact case-sensitive duplicates inside each list collapse to the first occurrence, and control characters are rejected before any pair is built. The pair budget is checked up front, so a request above 10,000 input pairs fails entirely instead of silently returning only the first page of phrases. None of these decisions happen implicitly; every property that affects ordering has an explicit input you control.

how do i keep keyword order consistent in keyword combiner
Keep Keyword Order Consistent in Keyword Combiner

What "consistent keyword order" means in a Cartesian product

A Cartesian product combines every item in one set with every item in another. In a two-list combiner that means each term in list A is paired with each term in list B, one pair per output line. Consistent order means the same source line at position 1 in list A always pairs with the same source line at position 1 in list B first, before position 2 in A pairs with position 1 in B, and so on. The tool walks the outer list top-to-bottom and, for each outer term, walks the inner list top-to-bottom. For a concrete picture, take list A as three colors (red, blue, green) and list B as two product names (shoes, hat). With A-then-B and a single space separator, the output is red shoes, red hat, blue shoes, blue hat, green shoes, green hat — six lines, in that order, derived from 3 × 2 = 6 input pairs. Reorder either list, flip the toggle, or change the separator and the six lines shift accordingly.

The three controls that lock the order in place

Source order. Each list is split on line breaks, trimmed at the outer edges, and deduplicated case-sensitively while preserving the first occurrence. So red, blue, red produces only red and blue in that order. Switching between red and Red does not merge them, and reversing your list before pasting reverses the final pairing sequence.

A-then-B or B-then-A toggle. The toggle chooses which list is the outer loop. Pick A-then-B and the result begins with every A term paired with the first B term. Pick B-then-A and the result begins with every B term paired with the first A term. The contract states the toggle changes the loop order as well as the phrase order, so picking it once and leaving it stable is part of keeping the output stable. For a side-by-side look at how each loop choice reshapes the same input, see Compare A Then B vs B Then A in a Keyword Combiner.

Separator. The separator is a literal string up to 20 Unicode code points with no line breaks or control characters. No hidden spacing is added. With a single space, red and shoes become red shoes. With an empty separator, the same two terms become redshoes. Whatever you type is exactly what appears, so a paste that picks up an invisible trailing space will land in the output verbatim.

Keep keyword order consistent across runs

  1. Paste one keyword per line in list A and one modifier per line in list B, with no blank lines and no trailing whitespace on each row.
  2. Note the exact order you pasted. Treat that order as part of the input — do not resort between runs unless you want a new sequence.
  3. Choose A-then-B or B-then-A and leave the choice unchanged for every repeat run.
  4. Type the separator exactly as you intend. If you need a single space, type one space. If you need a hyphen, type a hyphen and nothing else.
  5. Run the combine and copy the deterministic one-per-line output as a single block from Keyword Combiner.
  6. When you re-run later, paste the same lines in the same order, keep the same toggle, keep the same separator, and you will get the same text as before.

Why first-seen order makes the output deterministic

Determinism in this tool means the same inputs always produce the same output. The walk order is fixed: outer list top-to-bottom, inner list top-to-bottom. Empty lines are ignored, duplicates inside each input list are collapsed to the first occurrence, and the separator is appended verbatim. Because every step of the pipeline is fully specified by inputs you control, identical inputs across two sessions yield identical text. That property is what makes the result suitable for version comparison, regression testing, and ad-group drafts that must match a previous export. The pair budget is also calculated before output deduplication: the tool counts A×B before any pair is generated and rejects any request above 10,000 pairs without partial output. That gate is deterministic too — either the request runs to completion or it fails entirely.

That stability is what allows the output to flow into a spreadsheet, an ad-group draft, or a content brief without manual reordering. A reproducible output also lets you keep a test fixture: paste the same fixture, click combine, and compare the copy against a known string. If it does not match, one of the three inputs — source order, toggle, or separator — has drifted, and the audit summary helps isolate which one.

What silently changes order between runs

The order can drift even when the words look the same. Common causes:

  • Re-sorting or hand-editing the source list between runs. Re-paste the original order from a saved file.
  • Accidentally toggling A-then-B to B-then-A. Pin the choice in your notes.
  • Subtle separator drift: a stray space, a non-breaking space, or a hyphen-minus instead of an en-dash. Compare separators character-for-character before each run.
  • Blank lines at the end of a paste. Empty lines are ignored, so a list that ends with five blank lines behaves the same as one that ends without them, but a stray non-empty line near the end will shift every later pairing.
  • Mixing case to create new variants. Shoe and shoe stay distinct because deduplication is case-sensitive. Treat case as an intentional input, not noise.

Collisions after concatenation are another silent reorder. With an empty separator, ab plus c and a plus bc both produce abc. The tool keeps the first output it generated and reports the later collision separately, so the unique output count will be smaller than the input pair count. The audit summary shows removed input duplicates and removed output collisions, so use those numbers to confirm that the list you copied matches what you intended.

Hard limits that stop a request before order can matter

Before any pairing runs, several input limits are checked. If any one is exceeded, the entire request fails — the tool never returns a partial sample. The relevant limits are:

ControlLimit
Per editor paste size100,000 UTF-16 code units
Unique terms per list500
Characters per term100 Unicode code points
Separator length20 Unicode code points, no line breaks or control characters
Input pairs per request10,000 (request fails entirely above this)

Each term is trimmed at its outer edges and capped at 100 code points. Control characters are rejected, so paste from a clean source. Empty lines are dropped before counting, and case-sensitive deduplication is applied in first-seen order, so a list of 600 lines with 100 duplicates resolves to 500 unique terms — at the cap. If your normalized list sizes multiply to more than 10,000 input pairs, the request fails before any output is generated. Narrow one of the two source lists until the product is at or below the limit, then rerun.

If you're weighing options, Keyword Density Checker on Mac: A Browser Workflow covers this in detail.