Skip to main content
  • Label: Search (Text)
  • Description: Text search analytics.
  • Default group key: term
When you group search text metrics by term, Layers automatically consolidates spelling and plural variations of the same query into a single canonical form. For example, Layers groups searches for “charm”, “charms”, and “charmed” under one entry.Terms that only share a prefix stay separate. For example, “dress” and “dressing” each keep their own row and counts. This dataset only records completed searches, not autocomplete keystrokes, so every term reflects a query a shopper actually submitted.After consolidation, Layers re-sorts the results so the highest-volume terms appear first. This gives you a clearer picture of true search demand without noise from spelling variations or plural forms.

Metrics

  • requests (requests)
    • Number of search requests.
    • Example: COUNT_DISTINCT(requests)
  • results_count (results)
    • Results returned per search request.
    • Example: AVG(results_count)
  • total_sales (USD)
    • Gross sales credited to search by blended attribution, which splits one order fractionally across every surface that contributed to it. Shown in the dashboard as Attributed Revenue (blended). Measures line-item price after line-item discounts, in the store’s own currency: before tax and shipping, and not reduced by refunds or cancellations.
    • Example: SUM(total_sales)
  • quantity_purchased (items)
    • Number of items purchased from search traffic.
    • Example: SUM(quantity_purchased)
  • view_sessions (sessions)
    • Distinct sessions in which a product was viewed from search results. Counts sessions, not views: one session that views five products counts once. Shown in the dashboard as Viewing Sessions.
    • Example: COUNT_DISTINCT(view_sessions)
  • cart_sessions (sessions)
    • Sessions where a product from search results was added to cart.
  • quantity_added_to_cart (items)
    • Items added to cart from search results.
  • redirects (requests)
    • First-page search requests answered by a semantic redirect instead of results. Redirected requests are excluded from zero_results.
    • Example: COUNT_DISTINCT(redirects)
  • redirect_rate (rate)
    • Share of first-page search requests answered by a redirect. Computed as redirects / requests.
    • Example: SHOW redirect_rate
  • zero_results (requests)
    • First-page search requests that returned no results. Excludes redirected requests, SKU/barcode identifier-lane lookups, and requests where the shopper applied filters, so this metric reflects searches that genuinely failed to find relevant products. Filters injected by a request transform do not exclude a request. Track SKU/barcode lookups that matched nothing with identifier_lane_misses instead.
    • Example: SHOW zero_results
  • zero_result_rate (rate)
    • Share of first-page search requests with no results. Computed as zero_results / requests.
    • Example: SHOW zero_result_rate
  • transform_scoped_requests (requests)
    • First-page search requests constrained by filters injected by a request transform Add filter group action. Use this to see how much search traffic your transforms narrow.
    • Example: SHOW transform_scoped_requests
  • transform_scoped_rate (rate)
    • Share of search requests constrained by transform filters. Computed as transform_scoped_requests / requests.
    • Example: SHOW transform_scoped_rate
  • identifier_lane_lookups (requests)
    • First-page searches that query interpretation routed to the SKU/barcode identifier lane. Use this as the denominator when evaluating exact-code lookups.
    • Example: SHOW identifier_lane_lookups
  • identifier_lane_misses (requests)
    • First-page SKU/barcode lookups that matched no product. The shopper typed an exact code that is not in the catalog. This is a catalog-coverage signal rather than a relevance failure, so these are tracked apart from zero_results.
    • Example: SHOW identifier_lane_misses
  • identifier_lane_miss_rate (rate)
    • Share of SKU/barcode lookups that matched no product. Computed as identifier_lane_misses / identifier_lane_lookups.
    • Example: SHOW identifier_lane_miss_rate
  • filtered_requests (requests)
    • Distinct search requests where the shopper applied at least one filter. Filters injected by a request transform do not count.
    • Example: COUNT_DISTINCT(filtered_requests)
  • filter_usage_rate (rate)
    • Share of search requests with filters applied. Computed as filtered_requests / requests.
    • Example: SHOW filter_usage_rate
  • filtered_zero_results (requests)
    • Filtered search requests that returned no products. Use this to find filter combinations that dead-end the shopper.
    • Example: COUNT_DISTINCT(filtered_zero_results)
  • filtered_zero_result_rate (rate)
    • Share of filtered search requests with zero results. Computed as filtered_zero_results / filtered_requests.
    • Example: SHOW filtered_zero_result_rate

Dimensions

  • term: The search query string.
  • query_type: Type of search query.
  • language: Best-effort ISO language code inferred from the search query (for example, en, fr, pt-br). Empty when the query is too short or ambiguous to detect confidently, and only populated for text queries.
  • num_results: Number of results returned.
  • current_page: Current page index for paginated results (1-based).
  • shopping_channel: The shopping channel (web or app).
  • locale: Storefront locale code active for the request (e.g., en, fr, pt-br).
  • currency: ISO 4217 currency code applied to the request (e.g., USD, EUR).
  • session_returning: Session type — new or returning.
  • customer_state: Whether the shopper is authenticated — signed_in or guest.
  • customer_returning: Customer type — new or returning, based on prior order count.
  • b2b_company: Shopify B2B company location identifier for the signed-in company account.
  • billable: Whether this request is counted for billing.
  • attribution_token: Token used to attribute downstream events/purchases.
  • experiment_id: Experiment identifier.
  • experiment_group: Experiment group/variant.
  • device: Device category.
  • os: Operating system.
  • geo_country: Two-letter country code.
  • geo_state: Up to three-letter province code.
  • geo_city: City name as captured.
  • marketing_source: UTM source.
  • marketing_medium: UTM medium.
  • marketing_campaign: UTM campaign.
  • redirect_term: The matched term of the semantic redirect that answered the request. Only populated for redirected requests.
  • filter_property: The shopper-applied filter property (for example, option.color, metafield.custom.material). Transform-injected filters are excluded.
  • filter_operator: The operator used for the selection (in, notIn, eq, neq, range, geo, etc.).
  • filter_value: The selected value. Populated for in, notIn, eq, and neq; NULL for range and geo operators, which emit one row per request without values.
  • filter_name: Display-only merchant label for the filter property, resolved from the attribute’s nickname. Group by filter_property to populate this label.
Grouping by a filter dimension explodes each request into one row per selected value. SUM(requests) and other request-denominated sums will overcount; use COUNT_DISTINCT(filtered_requests) to count distinct requests. Grouping or segmenting by a filter dimension also disables the filter_usage_rate and filtered_zero_result_rate ratios. Use COUNT_DISTINCT(filtered_requests) (or filtered_zero_results) directly instead.

Examples

Search requests by term (last 7 days)
Search revenue by country (this month)
Top search terms with zero results
When you group zero_results by term, the result includes a row for every term with any search traffic, most of them valued 0. Add HAVING zero_results > 0 so the table only lists terms that actually failed. Top SKU or barcode lookups that matched no product (last 30 days)
The same applies here: HAVING identifier_lane_misses > 0 keeps terms that matched at least one product out of the table. Search volume by detected language (last 30 days)
Top French-language search terms (last 30 days)
Top queries that trigger a semantic redirect (last 30 days)
Redirect rate by day (last 30 days)
Most-used filter facets on search (last 30 days)

Next steps