Proactive analysis of 741 products across two fulfillment catalogs (A & B).
The gifting decision is one of the most moment-driven purchases in retail. A buyer searching for sympathy flowers at 10pm doesn't comparison shop. A customer who typed "pink roses for Valentine's Day" and landed on the right product is a conversion. The one who searched the same thing and found nothing — or something wrong — is a missed moment that doesn't come back. For a national brand, operating across two distinct fulfillment channels with multiple brands and thousands of products, the catalog is the infrastructure that determines which of those two outcomes happens at scale.
The commercial context matters here. Gifting retailers are moving toward AI-driven, personalized, occasion-led product discovery as the way to deepen customer relationships and grow beyond seasonal peaks. Better discoverability and stronger data infrastructure are the foundation that kind of experience is built on. That is not aspirational framing. It is the operational prerequisite for everything personalization requires. And it runs directly through the product catalog.
Most catalog work at this scale happens in the search layer — where organic visibility is won or lost. This analysis looked at the layer beneath it. Product data doesn't maintain itself. Catalogs that grow through new brands, seasonal launches, and international expansion accumulate errors quietly. A test record from an integration finds its way into the production index. An SEO title drifts from the product it's supposed to describe. A sympathy arrangement ends up classified under lighting. Five of the navigation dimensions gifting buyers use most — occasion, price, color, flower type, brand partner — are absent as structured fields entirely. None of these surface in a rankings dashboard. They show up instead as traffic that bounces, clicks that don't convert, and AI personalization that plateaus because the structured data it needs to operate simply doesn't exist.
This analysis ran on 741 products across the Catalog A and Catalog B catalogs — a representative sample of a portfolio of roughly 5,700 products. What it found is specific, addressable, and in several cases already affecting performance today. What follows is the full picture.
741 products analyzed across two fulfillment catalogs. Findings are organized by the mechanism behind each issue, not just the symptom.
The two catalogs share the same 30-column structure and the same root cause patterns. Catalog A issues concentrate in brand and URL consistency — the infrastructure of local delivery operations. Catalog B issues concentrate in SEO title integrity and product classification — the infrastructure of direct-ship discoverability. The structural gaps (absent occasion, price, color, and flower type as structured fields) exist equally across both.
Three passes ran before any findings were generated.
| Pass | What it does | What it found |
|---|---|---|
| 1 · Structural Profiling | Evaluates every column for blank rate, value entropy, atomic vs. compound values, and field-type consistency. | is3d_enabled: 100% blank. collection_assortment: 93–99% blank. base_image_name: 61% blank (Catalog B). Operational flags inconsistently populated. |
| 2 · Vertical-Taxonomy Matching | Scores columns against the gifting and floral reference taxonomy. Surfaces expected-but-absent structured attributes. | 5 vertical-typical concepts absent as dedicated columns: occasion, price, color, flower type, brand partner. Each exists in text fields only — not filterable or searchable. |
| 3 · Cross-Record Validation | Checks each record's values against its own catalog number, SEO fields, image data, and sibling records simultaneously. | 1 product actively serving wrong SEO title. 2 products with brand domain errors. 1 URL slug with wrong product ID. Test record from a platform integration in production. |
Four issues that are currently affecting indexed pages and organic performance. These are not risks — they are active.
126 findings organized by root cause. Where the pattern is systematic, EKOM resolves. Where judgment or confirmation is required, EKOM surfaces and routes.
| Field | Items | Severity | Finding | Resolution |
|---|---|---|---|---|
| SEO Title & Brand Integrity — Catalog A + Catalog B, customer-facing and indexed | ||||
| seo_page_title | 1 | Critical | Title describes wrong product entirely: "[Wrong Product Title]" for a preserved-flower product. Page is indexed. Every organic click bounces. Requires immediate correction and review of indexing state. | Review required |
| seo_page_title | 1 | High | Brand shows "[incorrect brand]" instead of "[Brand Name]." Indexed. SKU SKU-003. | Team applies |
| seo_page_title | 1 | High | Brand domain shows "[brand typo]" — transposed letters. Indexed. SKU SKU-004. | Team applies |
| seo_page_title | 1 | Medium | Title suffix does not match the product identifier — one extra digit in the trailing number. SKU SKU-018. | Team applies |
| seo_page_title | 1 | Medium | Title references "[partner brand]" brand instead of [incorrect brand] on a subscription product. SKU SKU-019. | Team applies |
| seo_page_title | 1 | Medium | Title and base_name do not match — verify whether differentiation is intentional before correcting. Verify whether differentiation is intentional before correcting. SKU SKU-020. | Review required |
| seo_page_title | 6 | Medium | Typos in indexed SEO titles: dropped and transposed letters in common gifting words — "arrangement" misspelled two different ways (4×), "personalized" scrambled (1×), and one misspelled collection name (1×). | Team applies |
| base_name | 3 | Medium | Matching typos in customer-visible product names: the same "arrangement" misspelling (2 SKUs) and the scrambled "personalized" (1 SKU). Apply with SEO title corrections. | Team applies |
| URL Structure — routing integrity and redirect risk | ||||
| url_keyword | 1 | Critical | Slug encodes the wrong product ID — off by one from the product's own identifier. Canonical URL routes to a different product. 301 redirect required before correction. SKU SKU-005. | Team applies |
| url_keyword | 3 | High | Leading "/p/" prefix will produce double-path URLs if platform prepends "/p/" on render. All other products use bare slugs. SKUs: SKU-006, SKU-007, SKU-008. | Team applies |
| url_keyword | 6 | High | International products use pipe separator (international|country…) instead of hyphen (international-country-…) used by all other international products. Inconsistent routing and breadcrumb parsing risk. | Team applies |
| url_keyword | 1 | Medium | Slug contains wrong product descriptor for a yellow-roses product — Color in URL does not match product. Name/URL mismatch. SKU SKU-009. | Team applies |
| url_keyword | 1 | Medium | Misspelling of "international" in the slug (a dropped letter). URL likely indexed. 301 redirect from old URL required. SKU SKU-010. | Team applies |
| url_keyword | 2 | Medium | The same "arrangement" misspelling in slugs. 301 redirects required. SKUs: SKU-011, SKU-012. | Team applies |
| Category & Classification — visibility and taxonomy integrity | ||||
| categories | 1 | Critical | Test product "[Integration] Test Record" in production with seo_searchable_flag=true. Included in a recent bulk retrigger. Entire record should be removed from production PIM. SKU SKU-001. | Remove |
| categories | 2 | Medium | Two cremation wreaths (flagged as sympathy products) classified under "lighting." Re-leaf to sympathy/wreaths category. SKUs: SKU-013, SKU-014. | Team applies |
| categories | 3 | Medium | Wine category slug uses capital "W" — inconsistent with all other lowercase slugs. May be intentional if taxonomy is case-insensitive; verify. SKUs: SKU-015, SKU-016, SKU-017. | Review required |
| categories | 23 | Medium | Categories field blank — 23 Catalog B products invisible to navigation and merchandising. Requires category assignment based on product type. | Review required |
| categories | 5 | Low | The chocolate category slug is misspelled (a stray separator splits the word). All five products are orphaned from the correct taxonomy node. | Team applies |
| product_function | 7 | Medium | Undocumented values: a duplicate-for-marketing marker (3 SKUs) and a compound core-plus-duplicate value (4 SKUs) are not in the defined controlled vocabulary. Downstream deduplication and noindex logic may not handle these correctly. Taxonomy definition required. | Review required |
| Content & Description Quality — accuracy and render integrity | ||||
| long_description short_description seo_meta_desc | 1 (×3 fields) | High | Geographic content mismatch: all three description fields reference "[wrong country]" on a [country]-delivered product. Copy was batch-loaded from a different market. Applies to SKU SKU-021. | Team applies |
| long_description | 4 | Medium | Malformed HTML across four Catalog A SKUs: truncated opening word ("utiful" instead of "Beautiful"), bare <li> tags without parent <ul>, unclosed elements, mismatched close tags. Content renders incorrectly or partially. | Team applies |
| base_name | 15+ | Medium | Duplicate product names across international Catalog A variants. Example: "[Product Name]" used for [Country A], [Country B], and [Country C] products. Append country/region to differentiate and prevent SEO cannibalization. | Team applies |
| long_description | 2 | Low | Double-encoded HTML entities (e.g., <p> appearing as literal text in rendered content). HTML unescape pass required before re-import. Catalog A SKUs: SKU-022, SKU-023. | Team applies |
| Operational Flags — default behavior risk on product pages | ||||
| delivery_message | 20 | High | Blank on 20 international Catalog A products. If blank behaves differently from a defined default, these products may show broken or missing delivery messaging at checkout. Confirm intended behavior. | Review required |
| show_addon | 19 | Medium | Blank rather than explicit boolean/numeric value on 19 Catalog A products. Empty may behave differently from false — add-on upsells may render by default. Confirm intended default and apply explicit value. | Review required |
| seo_meta_desc | 15 | Medium | Blank on 15 Catalog A international products. Search engines will auto-generate snippets — typically less compelling and less brand-controlled than a curated description. Populate from short_description as minimum fallback. | Team applies |
The catalog's structural foundation is sound — SEO content fields are nearly complete, product names are populated, and primary images are largely present. The findings above live in the gap between fields that are populated and fields that are performing correctly.
Several high-coverage fields contain values that are wrong or malformed — invisible to completeness checks, actively degrading performance.
Five dimensions gifting buyers filter on are absent as dedicated structured fields. The data exists — embedded in product names, descriptions, and keyword strings — but not in a form that can be searched, filtered, or fed to the AI systems personalized gifting depends on. These are the fields an AI personalization platform needs to deliver sentiment-led recommendations.
This analysis ran on a representative sample of 741 products across the retailer's two fulfillment catalogs — approximately 13% of the full portfolio. Three passes ran before any finding was generated: structural profiling (scoring every column for blank rate and value consistency), vertical-taxonomy matching (surfacing expected-but-absent gifting attributes like occasion, price, and flower type), and cross-record validation (checking each record's fields against its own identifiers, siblings, and indexing state). Client identity has been removed; the findings themselves are unaltered.