The window between "Payment accepted" and "Package in hand" is the part of the order your customer can't see, and silence in that window is what fills your inbox with "Where is my order?" emails. PrestaShop already has the machinery to close that gap: a tracking-URL field on every carrier, an order-state engine that fires emails on status changes, and a customer-facing order page that can surface a live tracking link. Most stores just never wire it up properly. This guide is about doing exactly that, turning PrestaShop's built-in shipped-and-delivered notifications into something a customer actually trusts, with the real back-office paths and the placeholder mechanics that trip people up.
This is the post-purchase notification piece of the shipping cluster. It assumes your carriers already exist; if you're still setting them up, start with setting up carrier modules in PrestaShop, and for the bigger picture see the complete shipping configuration guide.
Last updated: June 2026.
What "tracking" actually is inside PrestaShop

It helps to know that PrestaShop has two separate tracking concepts, because confusing them is where merchants get stuck.
- The carrier's tracking URL, a template stored on the carrier record (the url field on the Carrier object). This is set once per carrier and contains a @ placeholder where PrestaShop injects the tracking number.
- The order's tracking number, the actual parcel number (the tracking_number field on the OrderCarrier record), entered per order when you ship it.
PrestaShop combines the two: it takes the carrier's URL template, swaps the @ for that order's tracking number, and that becomes the clickable link the customer sees in their email and on their order page. Get either half wrong and the link is dead. Which is the single most common cause of a "your tracking doesn't work" complaint.
Setting the carrier tracking URL (back-office path)
This is configured once per carrier, not per order. In PrestaShop 1.7/8/9 go to Shipping → Carriers, edit a carrier, and on the first tab you'll find a Tracking URL field. Enter the carrier's tracking page URL with @ standing in for the parcel number. For example, a DPD template looks like https://tracking.dpd.de/status/en_US/parcel/@, PrestaShop replaces the @ with the real number at send time.
The exact tracking-URL strings differ by carrier, and getting them right (plus the rest of the integration) is carrier-specific work, those belong in the dedicated guides: DHL, DPD and UPS, GLS multi-country shipping, Colissimo, Mondial Relay relay points, and InPost Paczkomaty. Set the tracking URL when you set up the carrier and you'll never think about it again.
Where the tracking number gets entered, and what fires the email
Here's the part that confuses people coming from other platforms: in PrestaShop, entering a tracking number and notifying the customer are two different actions, and the order of operations matters.
On the order detail page (Orders → [open an order]), the Shipping / carrier panel has an editable Tracking number field. Typing a number there and saving stores it on the order. The reliable workflow is to enter the tracking number before you move the order to a shipped state. That way the customer notification, which is driven by the order status rather than the tracking field itself, goes out with a working link. Exactly when the email fires can depend on the current order state and your PrestaShop version, so the safe rule is always "number first, status second."
PrestaShop's Shipped order state has its "send email to customer" flag enabled and is linked to the in_transit shipped-mail template (the one that carries the {followup} tracking link). So the reliable sequence is:
- Enter the tracking number first and save it.
- Then change the order status to "Shipped" from the status dropdown.
When the status changes, PrestaShop builds the email using the carrier's tracking-URL template with that order's number substituted in, so the customer's "shipped" email arrives with a working tracking link, not an empty one. Do it in the reverse order and the first shipped email goes out before the number exists.
The order statuses that control notifications
Every delivery notification a customer receives is really an order-status change with email enabled. You manage these under Shop Parameters → Order Settings → Statuses (the OrderState records). For each status you can toggle Send an email to the customer when the order is in this state, choose the email template, and even set whether that status counts as "shipped" or "paid" for reporting.
| Order status | What the customer hears | Email on by default? |
|---|---|---|
| Payment accepted | "We've got your order and your money." | Yes |
| Processing in progress | "We're packing it." (optional reassurance step) | No, enable it |
| Shipped | "It's on the way, here's your tracking." (carries the tracking link) | Yes |
| Delivered | "It arrived." (great trigger for a review request) | Often off, worth enabling |
Two practical levers most stores miss: the Delivered status frequently ships with its email switched off, so customers never get a confirmation that closes the loop, turn it on. And you can create your own custom statuses (e.g. "Out for delivery", "Awaiting stock") with their own templates, which is how you build a notification ladder without any third-party tooling.
Making the shipped email worth opening
The shipped notification is one of the highest open-rate emails your store sends. The customer is actively waiting for it. PrestaShop's default template is functional but plain. Edit it under Design → Email Theme (or directly in mails/<lang>/), keeping the {followup} / tracking variables intact. What earns its place:
- A subject with the order number. "Your order #1042 has shipped" beats a generic "Order update"; it's instantly recognisable in a crowded inbox.
- The tracking link as a button, not buried prose, one obvious tap target, because half these emails open on a phone.
- An order summary, product names and quantities remind the customer what's actually coming.
- A clear delivery expectation. Don't restate the science of delivery-date promising here; that's its own topic, see setting realistic delivery expectations and why a delivery-date feature reduces anxiety.
- A reply path, a real support contact, so a worried customer replies to you instead of filing a chargeback.
What the customer sees on their side
Tracking isn't only an email. A logged-in customer's Order history → order detail page (and the guest Order follow-up page) renders the same tracking link, because the storefront pulls the carrier URL + order tracking number live. That matters: a customer who deleted the email, or who checked out as a guest, can still self-serve the tracking status instead of contacting you. The whole point is to remove every reason for the "where is it?" email, so make sure the link works in the order page too, not just the inbox.
Multi-package and multi-carrier orders
An order that ships in more than one parcel needs more than a single tracking field. Core PrestaShop records carrier and tracking data in OrderCarrier rows, but it does not ship a full back-office workflow for arbitrarily splitting items across multiple parcels each with their own carrier and tracking number, true multi-parcel, item-to-tracking handling generally relies on a carrier integration or a dedicated module. Whichever route you use, a customer waiting on two boxes should be able to track each one. When you do this:
- Tell the customer up front that the order arrives in multiple parcels, an unexpected single-box delivery reads as "half my order is missing."
- Make clear which items are in which parcel.
- If those parcels leave from different stock locations, the split is a function of how your fulfilment is set up, that's covered in multi-warehouse management.
When tracking goes wrong (and the customer is watching)
Proactive beats reactive every time. The merchants who handle delivery problems well are the ones who reach out before the customer notices:
- "Delivered" but not received, share the carrier's proof-of-delivery, ask the customer to check with neighbours/reception/safe-place. An active tracking record showing delivery is also your strongest defence against an "item not received" chargeback.
- Stuck in transit, if the tracking hasn't moved in a few business days, message the carrier and update the customer yourself; the silence is what erodes trust.
- Returned to sender, contact the customer immediately to confirm the address before reshipping.
- Damaged in transit, replace or refund promptly, then file the carrier claim on your side.
Automating it once the volume justifies it
Hand-typing a tracking number and flipping a status is fine at low volume. Past a certain order count it becomes a tax on your day, and that's where automation pays for itself, benefit framed: fewer manual steps, fewer "I forgot to mark it shipped" gaps, and a tracking link that's never empty because a human was rushing.
- Carrier-side import. Many carrier integrations write the tracking number back onto the order automatically when the label is generated, so the field is already populated before you touch the status.
- Status-driven email rules. If you've built a custom status ladder, a rules layer can move an order to "Shipped" the moment a tracking number lands, firing the customer email without you opening the order. Our delivery-date tooling can also feed an expected-arrival date into that shipped email so the customer sees both "it's moving" and "here's when."
- Bulk import. If you print labels outside PrestaShop, importing tracking numbers in bulk beats opening 80 orders one at a time.
Frequently asked questions
Why is my customer's tracking link dead or empty?
Almost always one of two halves is wrong. Either the carrier's Tracking URL template is missing its @ placeholder (so PrestaShop has nowhere to inject the number), or the order's tracking number wasn't saved before the shipped email fired (so the link was built with nothing to substitute). Check both: the URL template under Shipping → Carriers must contain a single @, and the number must be on the order before you change its status.
What's the correct order. Enter the tracking number or set "Shipped" first?
Number first, status second. The customer notification is driven by the order status, not the tracking field, so if you flip to "Shipped" before saving the number, the first shipped email goes out with an empty link. The reliable sequence is: enter and save the tracking number on the order's shipping panel, then change the status to "Shipped." Exactly when the mail fires can vary by current state and PrestaShop version, which is why "number first" is the safe rule every time.
My customers never get a "Delivered" confirmation, why?
The Delivered order status frequently ships with its customer email switched off, so the loop never closes. Go to Shop Parameters → Order Settings → Statuses, open the Delivered status, and enable "Send an email to the customer when the order is in this state." It's also the ideal trigger for a review request, since the customer has the product in hand.
Can I notify customers at stages between "Shipped" and "Delivered"?
Yes, create your own custom statuses (e.g. "Out for delivery", "Awaiting stock") under the same Statuses screen, each with its own email template and email flag. That's how you build a notification ladder, a reassurance step while packing, an out-for-delivery ping, entirely from core, without any third-party tooling.
How do I handle an order that ships in two parcels?
Core PrestaShop records carrier and tracking data in OrderCarrier rows but doesn't ship a full back-office workflow for splitting items across multiple parcels, each with its own carrier and tracking number, true multi-parcel handling generally relies on a carrier integration or a dedicated module. Whichever route you take, tell the customer up front that the order arrives in multiple parcels (an unexpected single box reads as "half my order is missing"), make clear which items are in which parcel, and ensure each parcel's tracking is reachable.
Where this sits in your shipping setup
Tracking notifications are the cheapest customer-satisfaction win in the whole shipping stack: the fields already exist, the email engine already exists, and the only work is wiring them together correctly, carrier URL with its @, tracking number on the order, status set to one that emails. Do that and the most-asked support question in e-commerce largely answers itself. Once notifications are solid, the rest of the shipping decisions, what to charge, how fast to promise, which carriers to offer, are about strategy rather than firefighting: see shipping strategy for small stores and, if you're weighing speed promises, whether same-day and next-day delivery is realistic.