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 brand with the reach and recognition of the client, 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 strategic context matters here. The client's declared multi-year strategy is built on a specific technical premise: that AI-driven, hyper-personalized, sentiment-led product discovery can deepen customer relationships and drive growth beyond seasonal peaks. New marketing leadership joined recently with an explicit mandate to improve product discoverability and strengthen data infrastructure as the foundation for that AI strategy. That mandate is not aspirational framing. It is the operational prerequisite for everything that strategy requires. And it runs directly through the product catalog.
EKOM's work with the client has been in the search layer — where organic visibility is won or lost. What this analysis did was look at the layer beneath it. Product data doesn't maintain itself. Catalogs that grow through acquisition, 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 5,681-product portfolio. 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 [Acquisition] 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 Preserved Serene Gardenias. 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 "981617" does not match product identifier "98167". Incorrect 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: "Arrengements" → "Arrangements" (3×), "Arrangment" → "Arrangement" (1×), "Personzlied" → "Personalized" (1×), "Paridise" → "Paradise" (1×). | Team applies |
| base_name | 3 | Medium | Matching typos in customer-visible product names: "Arrangment" (2 SKUs), "Personzlied" (1 SKU). Apply with SEO title corrections. | Team applies |
| URL Structure — routing integrity and redirect risk | ||||
| url_keyword | 1 | Critical | Slug encodes wrong product ID (41510 vs. 41511). 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 Twelve Yellow Roses product — Color in URL does not match product. Name/URL mismatch. SKU SKU-009. | Team applies |
| url_keyword | 1 | Medium | Misspelling "interational" (missing 'n'). URL likely indexed. 301 redirect from old URL required. SKU SKU-010. | Team applies |
| url_keyword | 2 | Medium | Misspelling "arrangment" in slugs. 301 redirects required. SKUs: SKU-011, SKU-012. | Team applies |
| Category & Classification — visibility and taxonomy integrity | ||||
| categories | 1 | Critical | Test product "[Acquisition] 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 (sympathy_value=1) 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 | "cho_colate" is a misspelling of the "chocolate" category slug. All five products are orphaned from the correct taxonomy node. | Team applies |
| product_function | 7 | Medium | Undocumented values: "duplicate_marketing" (3 SKUs) and compound "core;duplicate_no" (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 the client's declared strategy depends on. These are the fields an AI personalization platform needs to deliver sentiment-led recommendations at the level the strategy describes.
This analysis ran on a representative sample of 741 products across the retailer's two fulfillment catalogs — approximately 13% of the full 5,681-product 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.