Troubleshooting
Emails not arriving, carts not showing up, a sale not credited, or Pro features still locked? Find the symptom, check the likely causes in order, and fix it.
Each problem below starts with what you see, then works through the causes from most to least likely. The first check is usually the answer.
Two places tell you more than any guess:
- The cart drawer. Open a cart from ShapedRecover → Abandoned with View Details. Its Recovery Progress timeline shows every email (scheduled, sent, skipped with the reason, or failed with the error) and whether the shopper clicked the link. See Cart Drawer.
- The Dashboard banner. It says in one line whether tracking is on and a campaign is active. See The status banner.
Emails
Recovery emails aren't arriving
Open the cart in the drawer and look at its timeline. What it shows tells you where to look.
| The timeline shows | What it means | What to do |
|---|---|---|
| No email at all, and the Recovery Stage reads No reminders scheduled | No active campaign matched the cart's trigger when it was abandoned. | Switch a campaign on. It's scheduled for carts already waiting, as long as their send time is still ahead. See Carts already waiting. |
| Scheduled, marked Due now, and it stays that way | The email is due but hasn't been sent yet. | Background jobs are running late. See Emails go out late. |
| Paused | The cart's emails are on hold. | Resume the cart from its drawer. A cart paused while it was still Shopping stays paused once it's abandoned, so its emails wait too. See Pause and Resume. |
| Skipped, with a reason | A check right before sending failed, so the email was dropped for good. | The reason says why: the shopper ordered or unsubscribed, the campaign was switched off, nothing in the cart is in stock, or a later email had already gone. See Why an email was skipped. |
| Failed, with an error | Your mail system refused the email four times over about five hours. | Your site can't send email reliably. Run the Delivery Check, then follow Set Up SMTP. |
| Sent, but the shopper says it never came | WordPress handed the email to your mail system. Somewhere after that, it was lost or filtered. | Check spam first. See Emails land in spam. |
Two store-wide causes stop every email at once:
- Abandoned Tracking is off. While it's off, nothing sends. Emails that fall due wait, and go out when you switch it back on. See Tracking off pauses sending.
- No campaign is switched on. The starters arrive switched off. See Campaign List.
Emails land in spam
Cause: mail servers can't confirm the email really comes from your domain. Out of the box, WordPress sends through your web server, which on most hosting isn't a trusted mail server. Your WooCommerce order emails usually have the same problem.
Fix:
- Send through an email service with an SMTP plugin. See Set Up SMTP.
- Authenticate your domain with the SPF, DKIM and DMARC records your service gives you. This does the most for delivery. See Authenticate your domain.
- Use a From Address on that domain, in Settings → Sending. An email "from" a Gmail address, or another domain, fails the checks. See Match your From Address.
- Send a test to a Gmail or Outlook address and check where it lands. See Test Email.
ShapedRecover already does its part: every email carries a plain-text version, an unsubscribe link and the one-click unsubscribe headers that Gmail and Yahoo expect. Best Practices has habits that keep your sender reputation healthy.
Emails go out late
First, check what "on time" means. A campaign's delay counts from when the cart became abandoned, not from the shopper's last click. With the default 15-minute cutoff, a 1-hour email arrives about 1 hour 15 minutes after the shopper left, and up to 5 minutes more, because the background job runs every 5 minutes. That's normal. See The sweep.
If emails are much later than that, or every ShapedRecover tab shows Background jobs are running late…, the cause is WordPress's scheduler:
- Cause: ShapedRecover's jobs run through Action Scheduler, which is started by WP-Cron, and WP-Cron only runs when someone visits your site. On a quiet store, overnight, or with
DISABLE_WP_CRONset and nothing replacing it, nothing runs until the next visit. - Fix: ask your host to set up a server cron job that runs WordPress's scheduler every few minutes. See Add a server cron job.
- Check: WooCommerce → Status → Scheduled Actions, searched for
shaped_recover, should show one pending sweep and one pending daily job. See Check the jobs are running.
The warning clears itself on the first page load after the sweep runs again. When a backlog clears, a cart that missed several emails gets only the latest, so nobody gets a burst. See Overdue emails.
A merge tag shows as text, or as a gap
| In the email | Cause | Fix |
|---|---|---|
The tag itself, braces and all, like {{Customer.first_name}} | The tag has a capital letter. Tags are case-sensitive, so it isn't read as a tag at all, and isn't flagged when you save. | Retype it in lowercase, exactly as Merge Tags lists it, or insert it from the merge-tag menu. |
| A gap, like "Hi !" | Either the tag is misspelled (the editor warned Unknown merge tag when you saved), or it's correct but the shopper didn't give that detail. | Fix the spelling. For details that can be empty, add a fallback: {{customer.first_name|there}}. See Fallbacks. |
| Empty coupon text | The email went out without a coupon: the existing coupon expired or was deleted, or coupons are off in WooCommerce. | See When an email goes out without a coupon. |
A test email fills every tag with a sample shopper, so it shows both problems before a shopper sees them.
Carts
Carts aren't showing up in Abandoned
ShapedRecover saves a cart only once the shopper has typed a valid email at checkout and kept the consent box ticked. Work down this list:
- The date range. The Abandoned table shows carts by last activity, for Last 30 days by default. Widen it. See Date range.
- Tracking is off. Check Settings → General → Abandoned Tracking. It's off when you first install. Carts abandoned before you turned it on were never captured, and can't be added later. See The tracking switch.
- You're testing while logged in. Administrator and Shop Manager are excluded by default, so your own carts are never saved. Test in a private window, logged out. See User roles.
- The consent box was unticked. Nothing is saved, and anything already saved is deleted at once. See Unticking the box.
- No email was typed. A shopper who browses and leaves without typing an email at checkout can't be contacted, so nothing is saved. A half-typed address isn't saved either.
- The address is on your Never Track list (Pro). See Never Track.
- You used Stop Tracking on that shopper's visit in the last 2 days. See Stop Tracking one visit.
- The rate limit. One visitor can save at most 10 new or changed addresses a minute. Real shoppers never reach it, but a test that types address after address can.
When nothing is captured has the full list.
A cart stays Shopping, or never becomes Recoverable
A cart becomes Recoverable after Mark Cart as Abandoned After (15 minutes by default) with no activity, plus up to 5 minutes for the background job. If it's been much longer, background jobs are running late. See Emails go out late.
Campaigns
A campaign won't switch on
The toggle stays off and a red message under it says why. There are two reasons:
| Message | Cause | Fix |
|---|---|---|
| Another active campaign for Checkout abandoned already sends at 1 hour. | Two active campaigns for the same trigger can't share a delay. 24 hours and 1 day count as the same. | Change one campaign's delay, or switch the other off. See No two active campaigns at the same time. |
| This campaign sends at 30 days, after carts are marked lost. Increase "Mark Cart as Lost After" to at least 31 days to turn it on. | Lost carts get no emails, so a campaign must send at least a day before the lost cutoff. | Shorten the delay, or raise Mark Cart as Lost After in Settings → General. See The lost cutoff. |
The setup checklist didn't tick off after a test
Step 4, Send a Test Email, needs a campaign test: Send Test Email in the editor, or Send test from a campaign's ⋮ menu. The Delivery Check in Settings → Sending is a separate tool and doesn't tick off any step. The test also has to send successfully: a test that shows an error doesn't count. See It completes setup step 4.
Step 2 isn't done by any test either. It ticks off when From Name and From Address are both saved in Settings → Sending. See The WooCommerce sender suggestion.
The recovery link and coupons
The recovery link opens an empty cart
Where the shopper lands tells you the cause:
| What the shopper sees | Cause | Fix |
|---|---|---|
| Your home page, empty cart, no message | A page cache or CDN removed the link's ?sprcv_restore= code before WordPress saw it. | Keep that query string intact in your cache or CDN. See Page Caching. |
| The cart page with This link has expired. | The link is older than Link Expires After (7 days by default), or its cart no longer exists. | Expected for old links. Lengthen the expiry in Settings → Sending if your sequence is long. See Expired links. |
| The checkout with Some items could not be restored | Those products are out of stock, deleted or no longer for sale. If none could be restored, the cart is empty. | Nothing to fix. Today's stock and prices always win. See How the cart is rebuilt. |
| Your home page, after clicking the link in a test email | Test links never restore anything, by design. | Test with a real abandoned cart. See Test the Recovery Flow. |
If a working link reaches WordPress, a Clicked event appears in the cart's timeline. A click with no event means the request never got through.
The coupon isn't applied
Work down this list:
- Auto Apply Coupon was off when the email was sent. Turning it on later doesn't change emails already in inboxes. The shopper can still type the code. See Auto Apply Coupon.
- The coupon expired or was used. The 10% Discount Offer starter's codes last 1 day. WooCommerce shows its own message and the cart comes back without the discount.
- Nothing in the cart could be restored, so there was nothing to discount.
- The shopper used a different email address. A generated coupon only works for an order placed with the address the email went to.
- Another coupon got in the way. Generated coupons are individual use unless you turn on Allow Coupons to Combine (Pro), so they can't be combined with another code. If the shopper applies a different individual-use coupon, WooCommerce swaps it in and the recovery coupon comes off.
- Restrictions left nothing to discount. With Exclude Sale Items or Exclude Products (Pro), a cart of only excluded items gets no discount. An existing coupon follows its own rules from WooCommerce.
- The email had no coupon at all. The existing coupon was expired or deleted, or coupons are off in WooCommerce. See When an email goes out without a coupon.
- Free shipping is missing. It needs a Free shipping method that accepts coupons in WooCommerce → Settings → Shipping.
Reports
Recovered revenue is lower than expected
ShapedRecover credits a sale only when it can prove the email brought the shopper back. An order counts as recovered only when it was placed through the recovery link, within 14 days of that email, and paid. See The rule. So:
- The shopper came back without the link, by typing your address, from a search, or on another device. Their cart closes as Ordered: emails stop, no credit. See What never counts.
- The order came more than 14 days after the email, even through a link that still worked.
- The order isn't paid yet. A bank transfer or cheque order on hold isn't credited until you mark it Processing or Completed. Until then the cart's Recovery Stage reads Order #… · awaiting payment. See Paid.
- It was refunded or cancelled. A full refund or cancellation takes the credit back for good, even if you later set the order back to Processing. A partial refund lowers the value. See Refunds and cancellations.
- It's in a different date range. Recovered Revenue counts a sale on the day it was paid, not the day the cart was abandoned. See Which sales are in the range.
- The link didn't work, so the shopper rebuilt their cart and ordered anyway. See The recovery link opens an empty cart.
So treat the report as a floor: your real recovery may be a little higher than it shows, never lower.
An order shows Ordered, not Recovered
Ordered means the shopper bought, but not in a way that counts as a recovery. Open the cart in the drawer:
- No Clicked event in the timeline: the shopper never came back through the link, or came back on a different device or browser.
- A Clicked event, then the order much later: check the order was placed within 14 days of the email.
- An order event that reads Refunded or cancelled — no longer credited: the order was fully refunded, cancelled or marked failed after it was credited.
- The order through the link failed or was cancelled before it was paid, for example a declined card or an unpaid order that was cancelled. Check the order's status in WooCommerce → Orders.
- The order was created in WooCommerce → Orders, not at your checkout. Those never count.
An order through the link that's simply not paid yet isn't Ordered: the cart stays open and its Recovery Stage reads Order #… · awaiting payment. See Recovered vs Ordered.
Pro and the plugin itself
Pro features are still locked
Open ShapedRecover → Settings and look for the License section.
- The License section shows a key field. The license is inactive: never activated, deactivated, or not valid for this site. Activate it. See Activate a license.
- It reads Your License Has Expired. An expired license doesn't lock anything: Pro's features keep working, only updates and support stop. If something still looks locked, reload the page.
- There's no License section at all. Pro isn't running. Check Plugins for one of these notices:
- Shaped Recover Pro requires the free Shaped Recover plugin to be installed and active. Install and activate the free plugin. See Installation.
- Shaped Recover Pro is waiting for Shaped Recover, which is not running. The free plugin itself is waiting, usually for WooCommerce. Fix its notice first. See ShapedRecover shows a notice and does nothing.
- Shaped Recover Pro requires Shaped Recover … or newer. You are running … — please update Shaped Recover. Update the free plugin.
- You're a shop manager and locked fields say Needs an active license. Only an administrator can activate the license. See Who can change the license.
Free vs Pro explains what each license state unlocks.
ShapedRecover shows a notice and does nothing
When something it depends on is missing, ShapedRecover doesn't break your site. It shows a notice and waits, doing nothing until the problem is fixed:
| Notice | Fix |
|---|---|
| Shaped Recover requires WooCommerce to be installed and active. | Install or activate WooCommerce. |
| Shaped Recover requires WooCommerce 8.3 or newer. You are running WooCommerce … | Update WooCommerce. |
| Shaped Recover is paused: its data was saved by a newer version of the plugin … | You've gone back to an older version of ShapedRecover. Update it to the latest; your data hasn't been changed. |
ShapedRecover wakes up by itself on the next page load once the problem is fixed. On multisite, the notice Activate Shaped Recover on each site individually. after Network Activate means the plugin is network-active, which isn't supported. Click Network Deactivate in Network Admin → Plugins, then activate it on each store site. See Multisite.
Still stuck?
The FAQ answers the most common questions, and the Glossary explains any term you're unsure of. When you contact ShapedPlugin support, say what the cart's timeline shows: it's the fastest way to the answer.
Where to go next
- Set Up SMTP: reliable email and on-time background jobs.
- Test the Recovery Flow: check the whole loop as a shopper.
- Page Caching: keep the recovery link working behind a cache.