Handling Redirects
When redirects are enabled, the Unified Search response may include an action object instructing the frontend to navigate the user to a specific page instead of displaying search results.
Detecting a redirect
Check for the presence of action.redirect in the search response. When present, the filters dictionary contains the field name and target identifier for the redirect.
Response with redirect
Filter keys
The filters dictionary maps field names to target identifiers. The key tells you the type of redirect:
| Filter key | Redirect type | Target page |
|---|---|---|
CategoryIds |
Category | Product listing page (PLP) filtered by category |
ProductId |
Product name | Product detail page (PDP) |
SkuId |
SKU ID | Product detail page (PDP) |
SkuNo |
SKU number | Product detail page (PDP) |
| (custom attribute fieldId) | Custom attribute | PLP filtered by the attribute value |
Implementation
The general pattern for handling redirects is:
- Perform the search request
- Check if
action.redirectexists in the response - If present, map the filter to a URL in your application and navigate
Note
The mapFiltersToUrl function is specific to your frontend's URL structure. Adapt the URL patterns to match your application's routing.
Full search vs. quick search
Redirect behavior differs depending on the search type:
| Search type | Redirect behavior |
|---|---|
| Full search | Returns only the action object — no products, content, or other results. The frontend should navigate immediately. |
| Quick search | Returns the action object and limited results. Products are fetched using the redirect filters, so they match the redirect target. |
For full search, always check for redirects before rendering results. For quick search, you can show a preview of matching products while offering a link to the redirect target.
Quick search with redirect
When quick search detects a redirect, it follows the redirect internally and returns matching products:
| Quick search response | |
|---|---|
When redirects do not trigger
Redirects are skipped when:
- No search phrase is provided
- The user has applied filters or facets (not a pristine search)
- The search phrase is in the excluded phrases list
- The search phrase does not match any configured redirect source or phrase mapping
- The matched entity is ambiguous (e.g., a category name exists in multiple category paths)
- No products exist for the matched entity
- For PDP redirects: more than one unique product matches
Admin API reference
Redirect settings are managed per segment and go through the publication flow.
Route migration
All redirect settings endpoints have moved from /redirect-settings to /redirects/settings. If your integration uses the old routes, update them to the new paths below.
Get current settings
| Response | |
|---|---|
Update settings
| Request body | |
|---|---|
Response: 204 No Content
Note
After updating redirect settings, you must publish the segment for changes to take effect in live search.
Get available custom attributes
Returns all string-type product attributes that can be used for redirect configuration:
| Response | |
|---|---|
Redirect settings error responses
| Status | Condition |
|---|---|
400 Bad Request |
Duplicate custom attributes in request, or custom attributes not found in product fields |
404 Not Found |
Segment does not exist |
429 Too Many Requests |
Rate limit exceeded |
Excluded phrases API
Excluded phrases prevent specific search phrases from triggering redirects. See Excluded search phrases for the concept overview.
Create an excluded phrase
| Response — 201 Created | |
|---|---|
| Status | Condition |
|---|---|
400 Bad Request |
Search phrase is empty or already exists (case-insensitive) |
404 Not Found |
Segment does not exist |
Get an excluded phrase
| Response — 200 OK | |
|---|---|
Delete an excluded phrase
Response: 204 No Content
Search excluded phrases
| Request body | |
|---|---|
| Field | Type | Default | Description |
|---|---|---|---|
query |
string | — | Optional filter by phrase substring |
orderBy |
string | SearchPhraseAscending |
SearchPhraseAscending or SearchPhraseDescending |
maxResults |
integer | 25 |
Number of results per page (1–500) |
offset |
integer | 0 |
Number of results to skip |
| Response — 200 OK | |
|---|---|
Phrase mappings API
Phrase mappings allow you to manually map a search phrase to a specific redirect target. See Phrase mappings for the concept overview.
Create a phrase mapping
| Request body | |
|---|---|
| Response — 201 Created | |
|---|---|
| Status | Condition |
|---|---|
400 Bad Request |
Search phrase already exists (case-insensitive), or field name is not a valid redirect field |
404 Not Found |
Segment does not exist |
Get a phrase mapping
| Response — 200 OK | |
|---|---|
Delete a phrase mapping
Response: 204 No Content
Search phrase mappings
| Request body | |
|---|---|
| Field | Type | Default | Description |
|---|---|---|---|
query |
string | — | Optional filter by phrase substring |
orderBy |
string | SearchPhraseAscending |
SearchPhraseAscending or SearchPhraseDescending |
maxResults |
integer | 25 |
Number of results per page (0–500) |
offset |
integer | 0 |
Number of results to skip |
| Response — 200 OK | |
|---|---|
Phrase mapping fields API
These endpoints help discover which redirect fields and values are available for phrase mappings.
Get available fields
Returns redirect fields that can be used as phrase mapping targets. Only category and enabled custom string attributes are returned — product name, SKU ID, and SKU number are not supported for phrase mappings.
| Response — 200 OK | |
|---|---|
| Field | Type | Description |
|---|---|---|
fieldName |
string | The field identifier to use in phrase mappings |
displayName |
string | Human-readable field name |
fieldValueType |
string | Category or Values — indicates the type of values this field contains |
Resolve field display names
Resolves field name and value ID pairs to their display names. Useful for showing human-readable labels in the admin UI.
| Response — 200 OK | |
|---|---|
Search field values
Searches for available values within a specific redirect field. For category fields, this returns categories with breadcrumb-style details.
| Response — 200 OK | |
|---|---|
| Field | Type | Description |
|---|---|---|
fieldValueId |
string | The value ID to use in phrase mappings |
name |
string | Display name of the value |
details |
string | Additional context (e.g., category breadcrumb path). May be null. |
Migration from external redirects
If you currently handle redirects outside of Ecommerce Search (e.g., in a middleware or frontend layer):
- Enable redirect settings for the relevant segment via the Admin API
- Publish the segment to activate the settings
- Verify using the Playground in the admin UI to test specific search phrases
- Update your search handler to check for
action.redirectin responses - Remove external redirect logic once ECS-native redirects are confirmed working
Troubleshooting
| Issue | Cause | Solution |
|---|---|---|
| Redirect not triggering | Settings not published | Publish the segment after changing redirect settings |
| Redirect not triggering | Search has filters applied | Redirects only fire on pristine searches (no user-applied filters) |
| Wrong category redirect | Ambiguous category name | Ensure category names are unique across category paths |
| No PDP redirect | Multiple products match | PDP redirects require exactly one unique product match |
| Redirect for wrong attribute | Attribute not configured | Verify the custom attribute is listed in redirect settings |
| Redirect triggers for excluded phrase | Settings not published | Publish the segment after adding excluded phrases |
| Phrase mapping not working | Settings not published | Publish the segment after creating phrase mappings |
| Phrase mapping rejected | Duplicate search phrase | Each search phrase can only have one mapping (case-insensitive) |