- 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)
- First-page search requests answered by a semantic redirect instead of results. Redirected requests are excluded from
- redirect_rate (rate)
- Share of first-page search requests answered by a redirect. Computed as
redirects / requests. - Example: SHOW redirect_rate
- Share of first-page search requests answered by a redirect. Computed as
- 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_missesinstead. - Example: SHOW zero_results
- 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
- zero_result_rate (rate)
- Share of first-page search requests with no results. Computed as
zero_results / requests. - Example: SHOW zero_result_rate
- Share of first-page search requests with no results. Computed as
- 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
- Share of search requests constrained by transform filters. Computed as
- 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
- 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
- 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
- Share of SKU/barcode lookups that matched no product. Computed as
- 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
- Share of search requests with filters applied. Computed as
- 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
- Share of filtered search requests with zero results. Computed as
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 (
weborapp). - 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 —
neworreturning. - customer_state: Whether the shopper is authenticated —
signed_inorguest. - customer_returning: Customer type —
neworreturning, 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, andneq;NULLfor 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_propertyto 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)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)
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)