Coveo Multi-Site & Multi-Brand Architecture: Shared Catalogs, Regional Scoping, and Consolidated Governance
Global enterprises rarely run a single website. Modern holding companies, conglomerates, and international retailers operate dozens of distinct brand storefronts, regional portals, and B2B portals across North America, EMEA, and APAC. This guide details how to architect multi-site and multi-brand discovery in Coveo: choosing between single-org vs. multi-org topologies, enforcing zero catalog cross-contamination, and managing isolated machine learning telemetry.
1. The Multi-Site Architectural Spectrum
When architecting multi-brand search, engineering leaders must balance two opposing forces: centralized infrastructure efficiency (avoiding duplicate crawlers, pipelines, and licensing overhead) vs. strict brand isolation (preventing Brand A's products, merchandising rules, or ML trends from spilling into Brand B).
| Architectural Pattern | Index Topology | Pipeline Strategy | Ideal Use Case |
|---|---|---|---|
Single Organization, Shared Index (Partitioned via cq) | Unified cloud index with @brand and @site metadata flags. | Dedicated Query Pipeline per brand / site routed via searchHub. | Conglomerates with shared PIM/ERP backends and shared developer teams. Highest operational efficiency. |
| Single Organization, Dedicated Sources | Independent Push/Crawler sources for each brand within one Coveo org. | Pipelines scope directly to @source == "BrandA-Prod". | Brands with disparate data repositories but centralized analytics and administrative oversight. |
| Multi-Organization Architecture | Completely air-gapped Coveo Cloud organizations per operating company. | Isolated pipelines, security tokens, and user administration. | Heavily regulated conglomerates or separate business entities requiring isolated billing and legal compliance. |
2. End-to-End Multi-Brand Request Routing
In the recommended Single Organization, Partitioned Pipelines pattern, the request flows as follows:
- Storefront Ingress & Middleware: The client application (e.g. Next.js multi-tenant storefront) attaches the active site context (
siteId: "NordicGear-EU") to the request headers. - Search Token Binding: The backend authentication service mints an ephemeral JWT search token binding the user to
searchHub: "NordicGear-Storefront"and injecting context variables (market: "EU",currency: "EUR"). - Query Pipeline Dispatcher: Coveo's condition routing engine matches the
searchHubcondition and routes the request into the brand's dedicated pipeline. - Constant Query (
cq) Partition Guard: The pipeline injects an immutable constant query:
Becausecq: @brand == "NordicGear" AND @available_markets CONTAINS "EU" AND @is_active == "true"cqis evaluated as an in-memory bitset filter before free-text search occurs, it is mathematically impossible for another brand's SKUs to appear in the results. - Isolated ML Models: Because Usage Analytics events are stamped with the brand's
searchHub, Coveo Machine Learning (ART, DNE, Query Suggestions) trains on brand-isolated behavioral data without cross-brand contamination.
3. Federated Cross-Brand Discovery
While individual brand storefronts require strict isolation, parent company portals or marketplace holding pages frequently require Federated Cross-Brand Discovery:
- Cross-Brand Faceting: The global portal pipeline relaxes the
cq: @brand == "..."constraint, exposing an interactiveBrandfacet widget allowing shoppers to filter or compare products across sister brands. - Unified Cartridge Slotting: Editorial campaigns can feature curated hero cartridges containing selected items from multiple brands side-by-side.
- Permission Partitioning: If certain brands sell restricted items (e.g. medical devices or hazardous materials), Early Binding security providers ensure that only authorized buyers view restricted catalog entries.
4. Multi-Tenant Middleware Implementation Example
Below is a production Next.js middleware and token generation handler illustrating how to dynamically configure Coveo requests for multi-site deployments:
// lib/coveoMultiSiteToken.ts
import axios from "axios";
interface MultiSiteContext {
host: string;
userRole?: string;
}
const BRAND_CONFIG: Record<string, { brandId: string; searchHub: string; market: string }> = {
"nordicgear.com": { brandId: "NordicGear", searchHub: "NordicGear-Storefront", market: "US" },
"nordicgear.de": { brandId: "NordicGear", searchHub: "NordicGear-Storefront", market: "EU" },
"alpinetrek.com": { brandId: "AlpineTrek", searchHub: "AlpineTrek-Storefront", market: "US" },
"holdingcorp.com": { brandId: "ALL", searchHub: "Global-Federated-Search", market: "GLOBAL" }
};
export async function generateSiteScopedSearchToken(ctx: MultiSiteContext) {
const config = BRAND_CONFIG[ctx.host] || BRAND_CONFIG["holdingcorp.com"];
const COVEO_API_KEY = process.env.COVEO_SEARCH_TOKEN_CREATOR_KEY;
const COVEO_ORG_ID = process.env.COVEO_ORGANIZATION_ID;
// Mint ephemeral token valid for 15 minutes
const tokenPayload = {
userId: "anonymous_shopper",
searchHub: config.searchHub,
// Context attributes drive QPL routing and localized ranking
context: {
brand: config.brandId,
market: config.market,
userRole: ctx.userRole || "retail"
}
};
const response = await axios.post(
`https://${COVEO_ORG_ID}.org.coveo.com/rest/search/v2/token`,
tokenPayload,
{
headers: {
"Authorization": `Bearer ${COVEO_API_KEY}`,
"Content-Type": "application/json"
}
}
);
return {
token: response.data.token,
searchHub: config.searchHub,
brandId: config.brandId
};
}
5. Governance & Telemetry Best Practices
- Never share a SearchHub across distinct brands: Machine Learning models (ART & DNE) train per searchHub. Reusing the same searchHub across two brands causes click behavior from Brand A to distort search rankings on Brand B.
- Enforce
cqat the Pipeline Level, never client-side: Passing@brand=="BrandA"via client-side query parameters allows savvy users to tamper with URL parameters and inspect unreleased sister-brand items. - Use Shared Field Schemas: Standardize core fields (
@sku,@price,@brand,@category_path,@in_stock) across all brand sources to simplify cross-site federated queries.
Discussion (0)
Technical questions and architecture discussionsNo comments yet. Have a question about this architecture pattern? Leave a response below.
Join the Discussion