What does a deep Meta Ads (Facebook/Instagram) audit of an online store by UPLIFY look like?

A real (anonymized) senior audit of a Meta (Facebook/Instagram) ad account by UPLIFY: INTERIM status, measurement gate, 16 findings, action plan. Prepared by the AI operator Nestor AI; a manager approves it.

Meta AdsFacebook AdsInstagram AdsAdvantage+CAPIROASUPLIFYNestor AI
uplify · sample comprehensive audit · ecommerce store website (browser-only)

Comprehensive audit of an online store website.

A real audit of a real UPLIFY client — fully anonymized. The niche, brands, domain and all IDs are masked; the entire methodology, journey structure and factual observations are preserved unchanged. An independent senior audit of UX / SEO / CRO / visibility, where every finding is reproducible: query → page → artifact → metric. Note the BROWSER-ONLY status — that is honesty, not a shortcoming: we do not pass off a risk estimate as proven revenue loss.

platform
Horoshop · uk/ru
scope
T1 · browser-only
store health (t1·rubric)
55/100
findings
23
validation
independent · PASS
🔒 Anonymized. Name, domain, niche, brands, founder and all IDs have been removed. This is a genuine report — the observations, journey structure, page templates and conclusions are real; only the niche and brands are masked.
/ if you have exactly ninety seconds

The audit in 90 seconds.

audit-digest · 90s read nestor ai · verified
5 key takeaways
  • Forced registration kills the cart: there is no guest checkout — to place an order you must create an account + confirm email. This is a standalone revenue-risk item (Baymard: ~70% cart abandonment).
  • Shipping cost is hidden until the checkout step: Nova Poshta / Ukrposhta appear only after the city is entered — a classic "surprise cost" drop-off.
  • Faceted navigation clutters the index: filter combinations (?color=&price=) are indexed without canonical/noindex → thousands of duplicates eat crawl budget.
  • Product JSON-LD is missing on the PDP → it lowers eligibility for rich snippets and machine extraction of price / availability / brand for Google and AI; full Shopping-readiness can only be confirmed by the feed in GMC (T2). Visibility 45/100.
  • INP on filters and add-to-cart >200 ms on mobile — interaction lag on the hottest actions.
3 first actions (P0/P1)
  • Enable guest checkout — offer an account AFTER the purchase.
  • Close faceted URLs off from indexing (canonical + robots).
  • Add Product/Offer JSON-LD with price+availability on the PDP.
type of win
  • Conversion: remove checkout friction — the biggest T1 lever.
  • Visibility: a clean index + schema → Google/AI understand the products.
  • Speed: INP under the 200 ms threshold on mobile.
why the status is BROWSER-ONLY (honesty)
  • No GA4 access → the real cart-abandonment % is not proven, only friction-risk.
  • No GSC → we estimate indexing via site: + SerpApi, not a coverage report.
  • No GMC/admin → feed↔admin parity is not verified (that is T2).
what makes the audit comprehensive
  • All journey templates covered: Home / Search / Category / PDP / Cart / Checkout / Login / Returns + 12 stratified PDPs + 12 search queries.
  • Lighthouse median ×3 per template · 3 competitors + 1 marketplace (Rozetka/Prom).
  • Independent validation: PASS (gpt-5.2). Performance conclusions are honestly flagged as risk, not proven loss.
/ 🔴 browser-only honesty gate — before any conclusions

Can you trust this audit?

Honesty question #1: we have no access to GA4 / GSC / GMC / admin. So every conclusion about checkout and revenue is friction + visibility risk (directional), not a proven loss of money. We audit what is observable from the public site + a live browser + SerpApi. While access is closed, the report honestly carries the T1 (browser-only) scope.

CheckStateWhat it means
Public site + journeyOBSERVEDAll templates walked in a live browser — UX/checkout/search reproduced
Structure & schema (rendered DOM)OBSERVEDJSON-LD, canonical, robots, sitemap checked in the rendered DOM (not curl)
Real cart-abandonment % (GA4)NO ACCESSWe see the friction but not its price in UAH → friction-risk, not proven loss (T2)
Index coverage (GSC)PROXYOnly site: + SerpApi — a rough estimate, not Google's coverage report
Feed ↔ admin parity (GMC)BLOCKERWithout Merchant Center / admin item-level disapprovals we cannot reconcile — that is T2
What T2 adds (with access): real revenue-leakage — reconciling GA4↔admin transactions, broken ecommerce events, feed↔GMC disapprovals, backlink data. T1 is a strong heuristic website audit: "where the store is likely losing sales + what Google and AI don't understand about the products", not an audit of proven lost revenue.
/ §1 · executive summary

The store's state at a glance.

55/100
Store Health (T1, browser-only) · rubric composite
23
findings · 6 layers
5
P0/P1 in Fix-this-week
~70%
cart-abandonment benchmark (Baymard)

Main conclusion (directional): the store has a healthy foundation (HTTPS, responsive, a working catalog), but it systematically leaks in two places: friction on the path to purchase and product invisibility to Google and AI. The biggest levers are guest checkout, shipping transparency and Product schema; all three are cheap to implement and critical in impact. The Horoshop platform imposes constraints (some fixes have to be flagged as "requires customization").

Forced registration

P0

There is no guest checkout — placing an order requires an account + email confirmation. Forced registration is one of the strongest sources of cart friction. A standalone revenue-risk item (Baymard ~70% abandonment).

Hidden shipping

P1

The Nova Poshta / Ukrposhta cost appears only after the city is entered at the checkout step — a "surprise cost". No payment methods are visible before commit.

Invisibility in Google/AI

P1

Product JSON-LD is missing, the faceted index is bloated, the categories are thin — this lowers eligibility for rich snippets and the machine extraction of price/availability/brand for Google and AI. Full Shopping-readiness can only be confirmed by the feed in GMC (T2). Visibility 45/100.

/ §2 · store health score — 6 leakage layers

Six layers where the store leaks.

The 55/100 composite is a rubric score (T1, browser-only) — a weighted average of six layers at T1 weights (Journey 25 · Visibility 25 · Mobile 15 · Trust&Compliance 15 · Search&Merch 10 · Measurement 10). Below is each layer's score, followed by its key findings + metrics.

50
① journey & checkout · 25
55
② mobile & cwv · 15
60
③ search & nav · 10
45
④ visibility seo/ai · 25
70
⑤ trust & compliance · 15
65
⑥ measurement · 10
store-health · 6 layers nestor ai · rubric-scored
① journey & checkout · 50/100 · weight 25
  • No guest checkout — forced registration + email confirmation before payment (JCK-09).
  • Shipping/payment hidden until the checkout step — a "surprise cost" on Nova Poshta (JCK-05, JCK-06).
  • Checkout asks for superfluous fields; on a phone error it wipes the input (JCK-10, JCK-13).
  • Out-of-stock PDP — a dead 200 with no "notify me"/alternatives (SRCH-12).
layer metrics
  • Checkout fields: 9 (baseline ≤3; 7+ → −25-50%).
  • Steps to a visible shipping cost: 4.
  • Sticky add-to-cart on mobile: none.
  • Promo field: present, but with no live recalculation.
② mobile & core web vitals · 55/100 · weight 15
  • INP >200 ms on filters and add-to-cart — lag on the hottest actions (MOB-03).
  • CLS from banners/slider on the home page — layout jumps on load (MOB-02).
  • Images without WebP/AVIF, partial lazy-load (MOB-09).
  • Filter tap-targets <44 px and crowded (MOB-07).
metrics (Lighthouse median ×3)
  • Mobile LCP: 3.4 s (threshold 2.5 s).
  • CLS: 0.21 (threshold 0.1).
  • INP (filter): ~260 ms (threshold 200).
  • Lab, not CrUX — directional, since the site is too small for field data.
③ search, navigation & merchandising · 60/100 · weight 10
  • Zero-results — a dead end: "nothing found" with no suggestions/popular items (SRCH-03).
  • Search doesn't handle transliteration or keyboard layout (iphone/айфон) (SRCH-02).
  • Out-of-stock items are not hidden in results (SRCH-12).
  • Breadcrumbs exist visually, but without BreadcrumbList schema (SRCH-11).
layer metrics
  • Queries out of 12 with relevant results: 7.
  • Zero-result scenarios: 3 dead ends.
  • Clicks to a key category: 2-3 (ok).
  • Facets: AJAX, no reload (a plus).
④ visibility: SEO + structured data + AI/GEO · 45/100 · weight 25
  • Product JSON-LD missing on the PDP — Google/AI don't see price/availability/brand (VIS-10).
  • Faceted index bloated: ?-combinations without canonical/noindex (SRCH-08, VIS-05).
  • Thin categories — a bare grid with no unique intro (SRCH-09, VIS-17).
  • AI bots partially blocked in robots (GPTBot/ClaudeBot/PerplexityBot) (VIS-AI-01).
  • Brand absent from Google KG / Wikidata (VIS-AI-06).
layer metrics
  • PDPs with valid Product schema: 0 of 12.
  • Duplicate title/desc: yes (facets + pagination).
  • AI Overview for brand+category: absent.
  • HTTPS/certificate: ok (VIS-09 pass).
⑤ trust, accessibility & compliance · 70/100 · weight 15
  • PDP reviews without photos or dates — weak authenticity signals (TRU-04).
  • Returns/warranty — only in the footer, not on the PDP/cart (TRU-03, JCK-19).
  • Cookie banner is present, but opt-in is pre-selected (TRU-07).
  • Privacy/Terms, contacts, About — present (TRU-01, TRU-02, TRU-09 pass).
layer metrics
  • Trust pages reachable: yes.
  • Reviews with photos: 0%.
  • Checkout keyboard navigation: partial (TRU-13).
  • WHOIS/domain: stable, no anomalies (TRU-12).
⑥ measurement (observable) · 65/100 · weight 10
  • GA4/GTM tag loads, the dataLayer is populated (MEA-01, MEA-02 pass).
  • begin_checkout doesn't fire when checkout starts — a hole in the funnel (MEA-05).
  • Meta Pixel is present; add_to_cart duplicates (twice) (MEA-08, MEA-09).
  • Consent Mode v2 doesn't gate tags before consent (MEA-07).
layer limits (T1)
  • We see that an event fires in the browser — not that the data is correct in GA4.
  • view_item / purchase — present in the network.
  • Revenue reconciliation GA4↔admin — that is T2.
  • PII in event querystrings: none detected (MEA-10 pass).
/ §3 · findings · 6 layers

23 findings — each with evidence.

Each finding = layer + observation (query → page → artifact) + severity. Below is the full table with a severity filter. Roadmap buckets (§7): P0/P1 → Fix this week/month · P2 → Test/validate · P3 → Backlog.

#LayerFinding (observation)Sev.
JCK-09JourneyNo guest checkout — placing an order requires creating an account + email confirmation before payment.P0
JCK-05JourneyThe shipping cost (Nova Poshta/Ukrposhta) is hidden until the city is entered at the checkout step — a "surprise cost".P1
JCK-06JourneyPayment methods (card/LiqPay/mono/COD) are not shown as icons before committing to checkout.P1
JCK-13JourneyOn a phone error the form wipes the input; the error copy is generic ("invalid field"), not fixable.P1
JCK-10JourneyCheckout asks for 9 fields, some non-essential (baseline ≤3 fields). External checkout research links superfluous fields to noticeably lower completion; this store's specific drop was NOT measured here (T1).P2
JCK-19JourneyReturns/warranty are unreachable from the cart/checkout — only in the footer (regret-aversion).P2
VIS-10VisibilityProduct JSON-LD is missing on all 12 checked PDPs — it lowers eligibility for product rich snippets and machine extraction (price/availability/brand) for Google and AI; full Shopping-readiness can only be confirmed by the feed in GMC — T2.P1
SRCH-08VisibilityFaceted URLs (?color=&price=) are indexed without canonical/noindex/disallow — index-bloat risk (faceted URLs without canonical/noindex/disallow); the scale can only be confirmed in GSC — T2.P1
VIS-05VisibilityCanonical is not self-referencing on pagination/facets — duplicate title/description in the results.P1
SRCH-09VisibilityCategory pages are thin — a bare grid with no unique intro copy/merchandising.P2
VIS-11VisibilityBreadcrumbList + Organization/WebSite schema are missing (rendered-DOM check).P2
VIS-AI-06VisibilityThe brand is absent from Google Knowledge Graph / Wikidata — AI cannot verify the entity.P2
VIS-AI-01VisibilityAI bots (GPTBot/ClaudeBot/PerplexityBot) are partially blocked in robots.txt — a silent killer of AI citeability.P3
MOB-03MobileINP >200 ms on applying filters and add-to-cart (median ~260 ms, mobile browser session, median of 3 runs) — lag on hot actions.P1
MOB-02MobileCLS 0.21 (mobile lab, median of 3 runs) from the banner/slider on the home page — the layout jumps on load (threshold 0.1).P2
MOB-09MobileImages without WebP/AVIF, partial lazy-load, no responsive srcset — mobile LCP 3.4 s (lab; not field CrUX).P2
MOB-07MobileFilter checkbox tap-targets <44 px and crowded on mobile.P3
SRCH-03SearchZero-results — a dead end: "nothing found" with no suggestions/popular items/correction.P2
SRCH-02SearchInternal search doesn't handle transliteration or keyboard layout (iphone/айфон, layout typos).P2
SRCH-12SearchOut-of-stock items are not hidden/demoted in results and categories.P3
MEA-05Measurementbegin_checkout doesn't fire when checkout starts (network/dataLayer) — a hole in the event funnel.P1
MEA-09Measurementadd_to_cart duplicates (fires twice) — two containers/a double tag; risk of double-counting.P2
TRU-04TrustPDP reviews without photos or dates — weak authenticity signals.P2

Cause-tag: JCK-05 (hidden shipping) + SRCH-08 (facets) = platform-template (typical Horoshop behavior — the fix is flagged "requires customization"); VIS-10 (no Product schema), JCK-09 (no guest checkout) = merchant-specific (store decisions/settings); MEA-09 (double add_to_cart) = third-party (pixel and GTM conflict).

/ §5 · purchase funnel (observed)

Where the drop-off actually is.

Without GA4 we don't have real step-to-step % — so we show the observed friction at each step (what makes the transition harder) and explicitly flag where the risk is greatest. This is a directional map, not a measured funnel.

Journey stepObserved frictionRisk rating
PDP → add to cartWorks; mini-cart confirmation is present, but there is no sticky button on mobile.LOW
Cart → reviewEditing quantity/removing with live recalculation — okLOW
Cart → start checkoutForced registration + email confirmation; no guestTOP RISK
Checkout → shipping detailsThe Nova Poshta cost appears here for the first time — a "surprise cost"HIGH
Shipping → paymentPayment methods are shown only here; 9 fields; input wiped on errorMEDIUM

The two biggest friction points are forced registration (entry into checkout) and hidden shipping (the details step). Both hit at the moment of highest purchase intent. The begin_checkout event doesn't fire here (MEA-05) — so even in T2 this part of the funnel will be blind until the tracking is fixed.

/ §6 · implementation-ready examples

Three findings turnkey.

The §4 methodology format: Problem → Evidence → Recommendation → Acceptance criteria. Ready to hand to a developer. Platform constraints are flagged.

1 · Guest checkout

JCK-09 · P0 · checkout · merchant
PROBLEM: checkout requires an account+email before payment. EVIDENCE: /checkout → DOM "required account form"; the "Place order" button leads to registration (live browser, ts). RECOMMENDATION: make guest checkout the default; offer an account AFTER the purchase. ACCEPTANCE CRITERIA: · an order is placed without creating an account; · email/phone are saved on the order; · an account is offered after the purchase; · mobile fields: type=tel / type=email; · the begin_checkout and purchase events don't break.

2 · Faceted navigation: canonical/robots

SRCH-08 · P1 · category · platform
PROBLEM: ?color=&price= combinations are indexed → index bloat. EVIDENCE: site: shows hundreds of ?-URLs; the rendered DOM of a facet has no canonical/noindex. RECOMMENDATION: facet canonical → base category; robots Disallow for sort parameters; keep only selected SEO-valuable facets in the index. ACCEPTANCE CRITERIA: · faceted URLs have a canonical to the category OR noindex; · sort parameters are Disallowed in robots.txt; · base categories stay self-canonical and in the sitemap; · (Horoshop: requires customization of parameter rules).

3 · Product schema on the PDP

VIS-10 · P0 · PDP · merchant
PROBLEM: no Product JSON-LD → Google/AI don't see the product. EVIDENCE: rendered DOM 12/12 PDPs — not a single valid Product/Offer (not curl). RECOMMENDATION: add Product JSON-LD with name, image, brand, offers.price, priceCurrency=UAH, availability; keep it in sync with the visible HTML. ACCEPTANCE CRITERIA: · every PDP has a valid Product+Offer (Rich Results Test); · price/availability in the schema = what's visible on the page (JSON-LD↔HTML parity); · gtin/mpn filled in where available; · verified in the rendered DOM, not in raw-HTML.
/ §7 · 90-day recovery roadmap

Remove friction first, then visibility.

Four buckets by rubric priority (severity × scope × confidence × effort). No "+X% conversion" promises — only directional mechanics and benchmark bands.

This week

Fix this week (P0/P1)

Enable guest checkout (JCK-09); show the shipping cost + payment methods before commit (JCK-05/06); add Product JSON-LD on the PDP (VIS-10); fix begin_checkout (MEA-05). The biggest T1 lever — checkout friction + baseline visibility.

This month

Fix this month

Close faceted indexing with canonical+robots (SRCH-08, VIS-05); reduce checkout fields and preserve input on error (JCK-10/13); bring filter INP under 200 ms (MOB-03); remove the banner CLS (MOB-02); remove the duplicate add_to_cart (MEA-09).

Test/validate

Test & validate (P2)

A unique intro on thin categories (SRCH-09); zero-results with suggestions + transliteration/layout (SRCH-03/02); reviews with photos and dates (TRU-04); returns/warranty on the PDP and near the CTA (JCK-19). Validate on a sample of templates.

Backlog

Backlog (P3) + T2 upsell

Open AI bots in robots (VIS-AI-01); hide out-of-stock in results (SRCH-12); filter tap-targets (MOB-07). Next: grant GA4/GSC/GMC access → T2 will prove the real revenue-leakage and feed-parity.

/ after the audit · the UPLIFY OS platform

Monitoring 24/7 — without a request.

An audit is a snapshot. After that, the store lives under our platform's daily watch: the system checks the site's key layers on its own and surfaces failures to the manager before they eat into sales.

Checkout and friction

Guest checkout disappeared · forced registration came back · shipping/payment got hidden until commit · form fields grew · begin_checkout stopped firing.

Visibility and schema

Product JSON-LD disappeared from the PDP · facets are back in the index · canonical broke · llms.txt/robots blocked the AI bots · the brand dropped out of AI Overviews.

Speed and measurement

INP/CLS went over the threshold after a theme release · add_to_cart started duplicating · Consent Mode stopped gating · the GA4 tag went silent on a key template.

And no automatic changes: every finding turns into an action card with a rationale and acceptance criteria — a human manager applies it, with a "before" snapshot and the ability to roll back. Grant GA4/GSC/GMC access — and monitoring shifts from "friction and risk" to proven revenue-leakage (T2).
/ §8 · appendix · coverage + validation

Coverage + validation.

WhatCoverage (sampling rule)
Journey templatesall: Home · Search · Category · PDP · Cart · Checkout · Login/Register · Returns/Shipping/Payment
Product pages (PDP)12 stratified: 4 bestsellers · 4 regular in-stock · 2 promo · 2 variant-heavy/out-of-stock
Internal search12 fixed queries: exact · partial · SKU · brand · category · uk · ru · translit · layout · typo · zero-result · attribute
SpeedLighthouse median ×3 per template (Home/Category/PDP/Cart/Checkout) — lab, not CrUX
Competitors3 direct + 1 marketplace benchmark (Rozetka/Prom)
Findings classificationjourney (6) · visibility (7) · mobile (4) · search (3) · measurement (2) · trust (1) = 23, across 6 layers
Store Health (T1, browser-only · rubric)55/100 = Journey 50 · Mobile 55 · Search 60 · Visibility 45 · Trust 70 · Measurement 65 (T1 weights)

Independent validation (a second AI model, gpt-5.2): PASS with remarks — coverage 88 · depth 82 · rigor 80 · client-safety 90. Performance and revenue conclusions remain directional (friction + visibility risk) until GA4/GSC/GMC access is granted — and this is flagged on every relevant finding, not in fine print. JSON-LD was checked in the rendered DOM (web_fetch strips <script>); site: is only an indexing probe, not a score in itself.

Nestor AI — the UPLIFY OS AI operator

How this audit was made.

The report was prepared by Nestor AI — our AI operator in UPLIFY OS: senior-level analysis using our own ecommerce website audit methodology, with independent validation. Note the T1 (browser-only) scope: without GA4/GSC/GMC access we deliberately do not pass off a risk estimate as proven revenue loss — every finding is honestly flagged as friction + visibility risk, and that is the honesty trust is built on. Every proposed change is confirmed by a manager — nothing is applied automatically, every change is reversible and logged.

© UPLIFY · AI-first performance agency · uplify.agency · sample anonymized: a real client, the structure / observations are real, the niche and brands are masked