Why your WooCommerce cart-recovery plugin is missing orders (and the fix)
Most WooCommerce recovery plugins hook into PHP at checkout — which misses 70% of cart abandoners. Here's the script-tag approach that catches what plugins don't, with a setup walkthrough.
WooCommerce ships with no built-in cart recovery. The default behavior when a visitor adds something to cart and leaves: nothing happens. The cart sits in the database, the visitor never hears from you again, and the order is gone.
Most stores fix this by installing a recovery plugin. Plugins work — but they share a structural problem that costs you orders. This post explains the problem, then walks through a script-tag-only approach that avoids it.
How most WooCommerce recovery plugins work
Plugins like Abandoned Cart Lite, CartFlows Cart Abandonment, and Retainful all hook into Woo via PHP. They typically:
- Hook into
woocommerce_cart_updatedon the server side - Capture email when the visitor enters it on the checkout page
- Save a row in
wp_postmetaor a custom table containing the email + cart contents - Run a WP-Cron job that sends a recovery email after N hours
That works for a specific case: visitor reaches checkout, types their email, leaves before submitting. But it misses three large categories of abandonments where the order was recoverable.
What plugin-based recovery typically misses
1. Visitors who never reach checkout
Plugin email capture happens at the checkout step. If a visitor adds to cart and bounces from the cart page or the product page, the plugin has no email to send recovery to. That's 70–80% of cart abandoners on most stores.
2. Mobile + Ajax checkouts
Modern Woo themes (especially Storefront variants and headless builds) use Ajax everywhere — add to cart, checkout, payment. PHP hooks fire correctly only for the canonical form-submit flow. Ajax flows often trigger unreliably, and plugin authors don't always patch around theme variations.
3. Visitors identified through other means
Custom WooCommerce stores often capture email or phone earlier — through OTP login, a popup signup, a lead-magnet form — long before the checkout step. PHP plugins typically only know about email captured at the checkout form, ignoring identity from any other surface.
The script-tag approach
Instead of hooking into PHP, drop a single JavaScript tag in your WooCommerce theme's <head>. The tag runs in the visitor's browser and observes everything the plugins miss:
- Every product view — by reading schema.org Product JSON-LD or matching the
/product/:slugURL - Add to cart on Ajax — by listening for the jQuery
added_to_cartevent Woo fires on the body - Identity from any form — a single document-level submit listener captures email or phone from popups, login forms, OTP flows, anywhere a visitor types it
- Order confirmation — by reading the
/checkout/order-received/:idURL pattern
No PHP edits. No plugin in your wp-content/plugins/ folder. No risk of breaking your checkout flow during a Woo update.
Setup walkthrough
- Sign up for RecartIQ. Pick your store currency (INR, USD, etc.).
- From your site's detail page, copy the
<script async src=…>tag. - In WordPress admin: Appearance → Theme File Editor →
header.php. Paste the tag immediately before the closing</head>.
Or, if you use a child theme: edit your child theme'sheader.php(recommended — survives parent theme updates).
Or, if you don't want to touch theme files: use the "Insert Headers and Footers" plugin from WPBeginner. Paste the tag there. - Save. Visit your storefront, add a product to cart, open the browser DevTools network tab. You should see a request to
/api/public/collectwith your event payload.
Verifying it's working
From your RecartIQ dashboard, open the site detail page and look at the Tracker health card. Within an hour of traffic, you should see green checkmarks for:
- Tracker installed — events arriving
- Product pages detected— Woo's schema.org Product is being read
- Add-to-cart captured — the jQuery event is firing
- Identity captured — a form submit captured email or phone
- Orders logged — at least one order confirmation page detected
If a row is yellow, the diagnostic panel tells you exactly what to check (specific to WooCommerce: usually it's Ajax cart disabled, which you fix in WooCommerce → Settings → Products → General → Enable AJAX add to cart).
Building your first rule
A pragmatic starting setup for a Woo store:
- Exit-intent popup with a 10% off code. Catches visitors who never reach checkout.
- Email at 90 minutes if cart abandoned and identified. Set up Resend or your SMTP credentials in the per-site integrations panel.
- WhatsApp at 4 hours if a phone was captured — for Indian stores, this is where most of the recovery happens.
Each rule fires independently, and the dashboard's uplift report tells you which one is recovering the most revenue.
Will it conflict with my SEO plugin?
No. RecartIQ reads schema.org JSON-LD if present (which Yoast and Rank Math both emit) and falls back to URL patterns otherwise. Both paths are passive — we don't inject anything that could interfere with how Google reads your store.
Will it slow down my store?
The tracker is around 12 KB gzipped, loads asynchronously, and usesnavigator.sendBeaconfor outbound events so they don't block page rendering. PageSpeed Insights typically reports zero impact on LCP and CLS.