How to Show Christmas Delivery Cut-off Dates on Your Site
Work out your last order date for Christmas, show it in a banner that switches itself off, and give Google the same cut-off and delivery times.
· 8 min read
To show Christmas delivery cut-off dates properly, work out one "last order date" for each delivery option by
counting back from your carrier's last posting date, then put it in three places: a banner across the shop that
changes by itself when the date passes, a short table on your delivery page, and Google's shipping settings
(Search Console or ShippingService structured data) so search results don't promise faster delivery than you
can manage. It's about an hour's work, and it's best done in November, before the questions start arriving by
email.
Why now#
The run-up to Christmas is when "will it arrive in time?" decides a sale. Carriers such as Royal Mail, Parcelforce, DPD and Evri publish their own last posting dates for Christmas each year, and those are the dates everything else in this guide depends on.
Two calendar details are worth knowing this year. In England, Wales and Northern Ireland, Christmas Day 2026 is a Friday and the Boxing Day bank holiday moves to Monday 28 December, because 26 December is a Saturday. New Year's Day is Friday 1 January 2027, and Scotland adds a substitute day on Monday 4 January (GOV.UK bank holidays). And the UK clocks went back today, 25 October (GOV.UK), so every cut-off time between now and March is in GMT. That matters when you write times in code, below.
Step 1: Work out your last order dates#
Start with your carrier's published last posting date for each service you offer (standard, first class, tracked, next day). Look it up on the carrier's own website, not a news article from a previous year; dates shift each year with the weekdays. Then count backwards:
- Last posting date: the carrier's date for that service.
- Minus your handling time: how many working days it takes you to pick, pack and get a parcel to the post office or collection. Be honest about December, when you'll be busier than usual.
- Minus a buffer: one working day is sensible. Carriers' Christmas dates are recommendations, not guarantees.
- Plus a time of day: the hour after which an order counts as the next day, usually the time of your last collection or post office run.
Write the result as a short list you'll copy from everywhere else, for example:
| Delivery option | Last order for Christmas |
|---|---|
| Standard delivery | Thu 17 December, 2pm |
| Tracked 24 | Mon 21 December, 2pm |
| Click and collect | Thu 24 December, 12pm |
| Gift voucher (email) | Any time, sent instantly |
These are example dates to show the format; use the ones you worked out from your own carrier and handling time. Then decide when you'll start sending again (for example, Tuesday 29 December, after the moved Boxing Day holiday) so you can say so once the cut-off has passed.
Step 2: Add a banner that changes by itself#
A banner that still says "order by Thursday" on the following Monday does more harm than no banner. The simplest fix on a static site is to write every message into the page with the dates it applies to, and let a few lines of JavaScript show the right one:
<div id="christmas-delivery" class="bg-amber-100 px-4 py-2 text-center text-sm" hidden>
<p data-until="2026-12-17T14:00:00Z">
Order by 2pm on Thursday 17 December for Christmas delivery.
<a href="/delivery" class="underline">All delivery dates</a>
</p>
<p data-from="2026-12-17T14:00:00Z" data-until="2026-12-21T14:00:00Z" hidden>
Last chance: order with Tracked 24 by 2pm on Monday 21 December.
</p>
<p data-from="2026-12-21T14:00:00Z" data-until="2026-12-29T00:00:00Z" hidden>
Orders placed now will be sent on Tuesday 29 December.
Need a last-minute present? <a href="/gift-vouchers" class="underline">Send an e-gift voucher</a>.
</p>
</div>
<script>
const box = document.getElementById("christmas-delivery");
const now = Date.now();
for (const p of box.querySelectorAll("p")) {
const from = p.dataset.from ? Date.parse(p.dataset.from) : -Infinity;
const until = p.dataset.until ? Date.parse(p.dataset.until) : Infinity;
p.hidden = !(now >= from && now < until);
if (!p.hidden) box.hidden = false;
}
</script>A few details make this reliable:
- Write times with an offset.
Zmeans UTC, which is the same as GMT, so14:00:00Zis 2pm in the UK all winter. Without theZ, the browser reads the time in the visitor's own time zone, and a customer abroad sees a different cut-off. - One message per period, no gaps. Each
data-frommatches the previousdata-until, so there's always exactly one message until the last one ends, and then the banner hides itself. - It uses the visitor's clock. That's fine for a banner. Your checkout should still apply the real cut-off on the server or in your shop platform, if it can.
- Without JavaScript nothing shows, so the delivery page (next step) is where the dates must be written in plain text.
On the Freeframe shop templates the banner fits above the header; Market and Roast both have a cart and checkout, and Crumb already has an order cut-off for click-and-collect baking, which is the same idea on a daily scale. To restyle the strip in your own colors, see how to customize a Tailwind CSS template.
Step 3: Put the full table on your delivery page#
The banner is a reminder; the delivery page is the reference. Add the table from Step 1 near the top, with a sentence on when orders placed after the last date will be sent. Link to it from the banner, the basket and product pages, so anyone who wonders can check before they pay.
Also say plainly what isn't guaranteed. Something like "These dates are based on our carriers' recommended last posting dates. We'll do our best, but we can't guarantee delivery times once a parcel has left us" is honest and saves arguments in January.
Step 4: Tell Google the same thing#
Google can show delivery times and costs next to your products in search results. If those still show your normal speed when you're about to stop posting, customers get a promise you can't keep. There are two ways to give Google your shipping details.
The quick way: Search Console#
In Search Console, open Settings, then Shopping > Shipping and returns. You enter a minimum and maximum delivery time in days and a shipping cost per country. At the time of writing you need to be an owner or full user of the property, you don't need a Merchant Center account, and shipping details are approved automatically (Search Console Help). Google also warns that a listing can be rejected if it finds a lower shipping cost there than on your website, so keep the two in step.
The code way: ShippingService structured data#
If you'd rather keep it in the site, Google supports a shipping policy described with ShippingService, nested
under Organization with hasShippingService, ideally on one page such as your delivery page rather than
every page (Google's shipping policy documentation).
Two parts of it map neatly onto Christmas:
handlingTimeis aServicePeriodwithbusinessDays, acutoffTimeand aduration. Google says that for orders placed after the cut-off time, one day is added to the delivery estimate.seasonalOverrideon a set ofshippingConditionslimits those conditions to dates betweenvalidFromandvalidThrough, which suits a slower holiday service.
A trimmed example for a UK shop sending within the UK:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Your Shop",
"url": "https://www.yourshop.example",
"hasShippingService": {
"@type": "ShippingService",
"name": "Standard UK delivery",
"handlingTime": {
"@type": "ServicePeriod",
"cutoffTime": "14:00:00+00:00",
"businessDays": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"duration": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 1, "unitCode": "DAY" }
},
"shippingConditions": {
"@type": "ShippingConditions",
"shippingDestination": { "@type": "DefinedRegion", "addressCountry": "GB" },
"shippingRate": { "@type": "MonetaryAmount", "value": 3.95, "currency": "GBP" },
"transitTime": {
"@type": "ServicePeriod",
"duration": { "@type": "QuantitativeValue", "minValue": 1, "maxValue": 3, "unitCode": "DAY" }
}
}
}
}
</script>The +00:00 offset is GMT; when the clocks go forward in March, a 2pm cut-off becomes 14:00:00+01:00. For the
weeks when you're slower, add a second ShippingConditions object with longer transitTime and a
seasonalOverride whose validFrom and validThrough cover those dates. Test the page with the
Rich Results Test before you publish.
Pick one method. Google's documentation lists the order it trusts them in: settings in Merchant Center or
Search Console come before product-level markup, which comes before Organization markup. If you fill in Search
Console, it's those settings Google uses, and your markup is ignored.
Step 5: Have something to sell after the cut-off#
The day after your last posting date isn't the end of Christmas shopping, just the end of parcels. Swap the banner to things that still arrive in time: e-gift vouchers sent by email (see how to sell gift vouchers on your website), click and collect if you have a shop, or local delivery by hand. If your shop is also closing over the holiday, post those hours at the same time (holiday opening hours) so the dates agree.
Step 6: Take it down in January#
Put a reminder in your calendar for the day you start sending again. Then:
- check the banner has hidden itself (the last
data-untilshould be that day); - move the Christmas table on the delivery page into a short "Christmas 2026" note or delete it;
- remove any
seasonalOverrideconditions and put Search Console back to your normal delivery times.
Summary#
Count back from your carrier's last posting date, minus your handling time and a day's buffer, to get one last
order date per delivery option. Show it in a banner that switches itself by date (times written in GMT with a
Z), list it in plain text on your delivery page, and give Google matching times through Search Console or
ShippingService markup. After the cut-off, point people to gift vouchers and collection instead, and clear it
all away in January. If you're also planning offers before then, the
Black Friday sale guide has the same plan, show and take-down steps.