A travel brand wants to know whether it is visible when someone searches for a flight. The simplest answer is a rank report: average position by query, week over week. That number is easy to produce and easy to misread. Rank is not visibility, one snapshot is not a trend, and a result page is a composition of aggregators, airlines, media and OTAs — not a single competitive position.
The decision
The marketing team needed to decide where search investment should go: which destinations and query types are dominated by aggregators, where an airline or OTA can still appear on the first page, and whether the wording of a query changes the result mix. It also needed to know which claims the data could support. A one-day snapshot can describe composition; it cannot demonstrate improvement or attribute traffic.
What we worked with
A structured search-results extract for 100 destinations, each queried in two phrasings and two locales:
- Query: "flights to [destination]" and "tickets to [destination]", giving 200 distinct search terms.
- Locale: US and UK versions of the same search engine, producing two result sets per term.
- Result: position, title, snippet, displayed domain and URL for the top ten results.
- Context: query time, result count and search-engine parameters.
The traps we designed around
- The grain is not query plus rank. Each term appears twice — once per locale — so the same query and rank occur in two different result sets. Deduplicating on those two fields would silently delete one market. The correct grain is query × locale × rank.
- Rank is not visibility. The extract contains organic positions only. It does not show impressions, clicks, ads, featured snippets or map results. A page-one position can still receive little attention if the result is below a large ad block.
- One day is a snapshot. There is no seasonality, no algorithm update and no before-and-after. The analysis can say what the page looked like; it cannot say whether a change worked.
- The query set is designed, not sampled. One hundred destinations and two phrasings are a useful comparison, but they are not a random sample of all travel demand. Conclusions apply to the query set, not to the market as a whole.
- Domains need normalisation. The same brand appears with different country domains and subdomains. Counting "kayak.com" and "kayak.co.uk" separately understates aggregator concentration; classifying them requires a documented brand map.
- Snippet prices are text, not data. Prices quoted in titles and snippets may be examples, conditional fares or stale. Parsing them into a fare comparison would create false precision.
How the analysis was built
- Fix the grain and validate it. We confirmed the expected number of rows per query, locale and rank before any aggregation, and treated any mismatch as a data issue rather than an analytical result.
- Normalise domains and brands. Country domains and subdomains were mapped to parent brands, and each result was classified as aggregator, airline, OTA, media or other.
- Describe composition, not just position. For each query set, we measured the share of top-ten results by category and the number of distinct brands represented.
- Compare the two design dimensions. Results were compared across phrasing and locale, with the comparison stated as a description of this snapshot rather than a causal claim about wording or geography.
- Keep price text out of quantitative claims. Snippet prices were reported as "present or absent", not as a fare benchmark.
- Document the limits. The output includes a short note on what would be required to measure change: repeated snapshots, stable query set, and click or impression data.
What this changes
- The conversation moves from rank to composition. "We rank seventh" becomes "we appear on page one for these queries, next to these aggregators, in this locale".
- Phrasing and locale become explicit variables. The team no longer averages across them without checking whether the result mix differs.
- Aggregator concentration is visible. The share of first-page results held by aggregators is a more useful competitive measure than a single brand's average position.
- Price claims are handled cautiously. Snippet prices are treated as marketing copy, not as a source of fare data.
What you receive
- A validated result table with an explicit grain.
- A domain and brand classification with the mapping documented.
- First-page composition by destination, phrasing and locale.
- A visibility summary with the snapshot's limits stated.
- A measurement plan for repeated snapshots and click-level data.
Where this applies
The method fits travel, e-commerce and any business whose demand starts with a search. The minimum inputs are a fixed query set, result position, displayed domain, locale and the date of collection. The first deliverable is usually a grain and domain-mapping note — most search reports fail before the chart stage.
This is an illustrative case study using a public search-results snapshot; it does not report results from a specific client engagement. It reflects our standard method for search visibility analysis.
