Academy

Offer Boxes: Expiry, Eligibility, and Deal Rules

Build an offer box with a real deadline or eligibility rule, complete terms, honest urgency, accessible status, and structured data machines can verify.

15 min read

An offer box presents one time-bound or conditional commercial benefit together with the rules required to claim it. It gives a buyer the value, eligibility, deadline, redemption method, and next action in one bounded unit; it never manufactures urgency where no real constraint exists.

The rendered offer is deliberately complete even when removed from its page: the benefit has a unit, the audience is explicit, the code is text, the exclusions are nearby, the deadline includes a time zone, and the link says what happens next. The brand, code, dates, and amounts are illustrative rather than a live AmICited promotion.

Why this element matters

An offer changes the timing or economics of a decision. Readers therefore ask two questions at once: “Is this valuable to me?” and “Can I actually claim it?” A box lowers the effort of answering both, but only when the benefit and the constraint are equally visible. A large “40% off” line followed by eligibility in tiny print attracts attention by withholding the fact that determines whether the promise applies. That is persuasion through ambiguity, not useful urgency.

Real urgency helps a reader avoid losing an option. False urgency pressures a reader while preserving the seller’s option to continue the promotion indefinitely. Never use “today only,” “last chance,” a resetting countdown, or “limited time” unless an approved source defines the genuine end. When the promotion is extended, the source, visible deadline, caches, and structured data must be updated as one controlled change. Repeatedly moving the deadline teaches returning visitors that the timer is decorative.

Machine extractability is the ability of a crawler, shopping agent, search engine, or syndication system to retain the relationships among the offer, its item, price effect, eligibility, and validity. “Save 40” is not a complete fact: the unit could be currency or percent, and the saving might apply per order, per item, or per month. A well-formed offer exposes a stable statement such as “New customers save USD 40 on one annual Growth plan with code GROW40 until 31 August 2026 at 23:59 Europe/Bratislava.”

Expiry is operational data, not just copy. If a publishing system renders the deadline but cannot change the active state after it passes, the page will eventually make a false claim. The content model must give the renderer a machine-readable timestamp and a safe expired state before the campaign launches.

When to use it

Use an offer box when one promotion materially changes the normal transaction and at least one boundary applies: a start or end time, an eligible audience, a minimum spend, a product or plan restriction, a geographic limit, a redemption cap, or a coupon requirement. Common uses include a seasonal discount, a first-order credit, free shipping over a threshold, a bonus item with a qualifying purchase, or a temporary upgrade for existing customers.

Use it only when the reader can act on the offer from this page or understand exactly where redemption occurs. An editorial mention that “the vendor sometimes runs sales” is not an offer. A standard price available to everyone indefinitely is normal commercial information and belongs in a price table or product price line.

Near misses are common:

  • A permanent “new customer discount” can be conditional without being time-bound. It still needs the qualifying definition, exclusions, and verification date, but it must not say “hurry.”
  • A free trial that is part of the normal product is a plan term, not a deal, unless a campaign temporarily changes its length or scope.
  • An affiliate voucher belongs in an offer box only when the publisher has verified the current terms and clearly discloses the commercial relationship nearby.
  • A product merely being in stock is availability, not an offer. Do not turn inventory status into urgency unless stock is genuinely constrained and the quantity claim comes from a live source.
  • A general “Book a demo” invitation is a CTA block , not an offer. Adding a free consultation does not create a deal if that consultation is always included.

The element writing rules take precedence: choose the block by purpose rather than its border, color, heading, or marketing label. If the purpose is to communicate one bounded commercial incentive, use the offer element even when the design resembles a notice or CTA.

Logo

Ready to Monitor Your AI Visibility?

Track how AI chatbots mention your brand across ChatGPT, Perplexity, and other platforms.

Where to place it

Place the box after the reader can identify the product, service, or plan to which it applies and before the normal purchase action. On a product page, that usually means beside or immediately below the price and variant selector. On a pricing page, place it directly above the eligible plan action or below the table with an explicit list of affected plans. On an editorial buying guide or review, place it after the relevant option’s evaluation, not before the evidence that justifies the recommendation.

Keep the offer name, benefit, eligibility, deadline, exclusions, code, and action in one reading unit. Terms that change eligibility may open in a longer disclosure, but the decisive conditions cannot be hidden there. A reader must not have to follow a link to discover a minimum spend, excluded plan, automatic renewal, geographic restriction, or one-redemption limit.

Do not place an offer box beside another promotion, a conflicting standard price, a warning about safety or suitability, or a form that asks for a different action. Do not sandwich it between a product name and the price it modifies. Keep it out of checkout error areas, where urgency can compete with payment or validation messages. One viewport should not contain two countdowns or two equally dominant redemption actions.

On mobile, keep this order: benefit, item, eligibility, deadline, code, essential exclusions, then action. A sticky offer may summarize an already-viewed box, but it cannot hide content, reset its timer, or become the only place where terms appear.

Anatomy

  1. Status label: says scheduled, active, or expired from the timestamps; it does not use vague urgency.
  2. Benefit: states the exact saving or added value with a currency, percentage, quantity, or shipping condition.
  3. Eligible item: uses the official product, category, service, or plan name.
  4. Eligibility: defines who and what qualifies, including region, customer status, minimum spend, and redemption cap.
  5. Validity window: shows the start when relevant and the exact end with date, time, and IANA time zone.
  6. Redemption method: gives a visible coupon code, automatic-discount statement, or precise instruction.
  7. Essential exclusions: keeps decision-changing limits in the box; a longer terms page may provide legal detail but cannot reverse them.
  8. Action: names the next transaction step and leads to a page that honors the offer.
  9. Verification: identifies when the offer was checked and which approved campaign source owns it.
  10. Expired state: replaces or removes the active action at the deadline and prevents stale structured data.

Design examples

All variants use the same contract. The visual difference reflects how the benefit is calculated, not a license to omit terms.

Amount or percentage discount: use for “20% off” or “Save USD 40.” State the calculation base. If a previous price appears, it must be the genuine comparison price approved for that market rather than an inflated anchor.

Free shipping: name the minimum basket, destination, delivery service, and excluded fees. “Free delivery over USD 75 in the contiguous US by standard ground service” is extractable; “Shipping on us” is not.

Bundle or gift: identify the qualifying purchase and the exact included item or service. Say whether the bonus is added automatically and what happens if it is unavailable.

Audience-conditional offer: use for a verified group such as students, nonprofit organizations, or first-time customers. Explain how status is checked and avoid an expiry unless the program actually has one.

Scheduled and expired states: scheduled content shows when the offer begins without an active claim action. Expired content says the offer ended and may link to standard pricing; it must not keep a working coupon button or imply that the old terms remain available.

Parameters

“Source” below means where the renderer obtains a field. It does not replace the approved campaign record used to verify the claim.

NameTypeRequiredMin/maxDefaultSource
titlePlain stringYes4–12 wordsNoneFirst heading in body
variantEnum: discount, shipping, bundle, audienceYesOne valuediscountAttribute
benefitPlain stringYes2–12 words; 80 charactersNoneAttribute
itemPlain stringYes1–10 wordsNoneAttribute
eligibilityPlain textConditional5–35 wordsNoneBody
startsAtISO 8601 datetimeNoOne timestamp with offsetImmediateAttribute
expiresAtISO 8601 datetimeRequired for time-bound offersOne timestamp with offsetNoneAttribute
timezoneIANA time-zone nameRequired with displayed timesOne valueNoneAttribute
codePlain stringConditional3–24 charactersNoneAttribute
redemptionEnum: automatic, code, claimYesOne valueautomaticAttribute
termsPlain textYes1–5 items; 80 words totalNoneBody
ctaTextPlain stringYes while active2–6 words; 40 charactersNoneAttribute
ctaUrlAbsolute or root-relative URLYes while activeOne valid destinationNoneAttribute
verifiedISO 8601 dateYesOne exact dateNoneAttribute
campaignSourcePlain text identifierYes3–80 charactersNoneBody
expiredBehaviorEnum: replace, hideNoOne valuereplaceAttribute
expiredTextPlain stringRequired when behavior is replace3–20 words“This offer has ended.”Body

At least one boundary is mandatory: expiresAt or eligibility. A time-bound offer without expiresAt is invalid. The offset in expiresAt drives state changes; timezone supplies the human-readable zone. Do not rely on a date-only value because readers in different zones may see different effective deadlines.

Syntax and code examples

The portable directive is the authored contract. Hugo and WordPress map the same fields; they do not create new commercial meanings.

Portable Markdown directive

:::offer-box{variant=discount benefit="Save USD 40" item="Annual Growth plan" startsAt="2026-08-27T00:00:00+02:00" expiresAt="2026-08-31T23:59:00+02:00" timezone="Europe/Bratislava" code=GROW40 redemption=code ctaText="Choose an annual plan" ctaUrl="https://example.com/checkout/growth" verified=2026-08-27 expiredBehavior=replace}
## Save USD 40 on an annual Growth plan

Eligibility: New customers; one redemption per account.

Terms: Not valid with another discount. Code must be entered at checkout.

Campaign source: Growth annual launch, revision 2026-08-27.

Expired text: This offer ended on 31 August 2026.
:::

The first heading maps to title. Labelled body lines map to eligibility, terms, campaign source, and expired text. The visible renderer should localize the date while retaining the exact machine timestamp.

Hugo shortcode

No offer-box shortcode exists in this repository yet. The intended adapter uses named parameters only and should be implemented as a reviewed component before production content calls it:

{{< offer-box
  variant="discount"
  benefit="Save USD 40"
  item="Annual Growth plan"
  expiresAt="2026-08-31T23:59:00+02:00"
  timezone="Europe/Bratislava"
  code="GROW40"
  redemption="code"
  ctaText="Choose an annual plan"
  ctaUrl="https://example.com/checkout/growth"
  verified="2026-08-27"
  expiredBehavior="replace"
>}}

The example is escaped so Hugo does not invoke a nonexistent shortcode. When the adapter is built, it must calculate status server-side and support client-side expiry without depending on JavaScript for the essential terms. Cache invalidation or scheduled publishing must ensure the server-rendered page also changes after the deadline.

WordPress

<!-- wp:amicited/offer-box {"variant":"discount","benefit":"Save USD 40","item":"Annual Growth plan","expiresAt":"2026-08-31T23:59:00+02:00","timezone":"Europe/Bratislava","code":"GROW40","redemption":"code","ctaText":"Choose an annual plan","ctaUrl":"https://example.com/checkout/growth","verified":"2026-08-27","expiredBehavior":"replace"} -->
<div class="wp-block-amicited-offer-box">
  <h2>Save USD 40 on an annual Growth plan</h2>
  <p>New customers; one redemption per account. Not valid with another discount.</p>
  <p>Use code <strong>GROW40</strong>. Ends 31 August 2026 at 23:59 Europe/Bratislava.</p>
</div>
<!-- /wp:amicited/offer-box -->

The WordPress block stores typed attributes and visible text together. Its editor should flag a missing expiry for time-bound language and preview active, scheduled, and expired states.

Examples

Good

Free standard delivery on orders of USD 75 or more
Available for delivery addresses in the contiguous United States. Oversize-item surcharges still apply. The discount is applied automatically at checkout. Verified 27 August 2026.

This is good because it names the benefit, basket threshold, eligible geography, service level, exception, redemption behavior, and verification date. It is a standing conditional rule, so it does not invent an expiry or urgency phrase.

Bad

Hurry—limited-time free shipping!
Some restrictions apply. Shop now before it is gone.

This is bad because “limited-time” has no deadline, “free shipping” has no region, threshold, method, or exclusions, and the action supplies pressure instead of transaction detail. A crawler cannot determine who qualifies, and a reader cannot know the final cost until checkout.

Schema markup and accessibility

An offer box does not create schema by itself. When the page genuinely offers an identified product or service, its verified facts can feed a Schema.org Offer nested under that product or service: price, priceCurrency, availability, url, seller, and priceValidUntil when a displayed price really ends on that date. itemOffered may connect a standalone offer to its subject. Use AggregateOffer only for a real set of offers, not for one deal with several conditions.

Structured data must match visible content and the commerce system. Do not encode the undiscounted price as the active price, convert a percentage coupon into an invented numeric price, or keep priceValidUntil after the visible deal expires. Schema.org’s discountCode property belongs to Order, so do not attach a coupon code to Offer merely because the name sounds suitable. Keep the code in visible content and platform transaction data unless a supported vocabulary and consumer require another mapping.

For accessibility, use an <aside> or labelled region when the offer is supplementary; use a normal section when it is the page’s primary content. Keep the heading in the document hierarchy. Do not convey active, scheduled, or expired state by color alone. Announce a copy-code result through a polite live region, keep the code selectable as text, and give the copy control a label such as “Copy code GROW40.”

A countdown must not update every second in a live region; that would repeatedly interrupt screen-reader users. Show a static exact deadline as the source of truth. If a coarse countdown is useful, hide repetitive timer changes from assistive technology and announce only meaningful transitions such as “Offer has ended.” Keyboard focus must not jump or disappear when the active CTA is replaced at expiry.

Writing rules

Explain the boundary because it decides whether the benefit is real for this reader; only then add urgency. Apply these production limits:

  • Keep the title to 4–12 words and the benefit line to 80 characters. Put the amount, percentage, gift, or shipping benefit before campaign wordplay.
  • Use one offer per box, one primary action, and no more than five essential term items. Split unrelated promotions instead of joining them with “and.”
  • State percentage discounts as a number plus %; state monetary benefits with an ISO currency code when readers may see more than one market.
  • Name the qualifying product, plan, order value, region, and audience in literal language. “Selected items” is acceptable only when the box links to a complete eligible collection.
  • Write an exact deadline as day, month, year, time, and IANA time zone. Avoid “midnight,” which can ambiguously mean the start or end of a date.
  • Say whether redemption is automatic, code-based, or requires a claim. Never make the reader discover the mechanism after clicking.
  • Keep exclusions that change price or eligibility inside the box. Do not bury minimum spend, renewal, taxes, fees, geographic limits, or excluded variants in a distant terms page.
  • Use factual, calm language. Never use a resetting timer, fake inventory, an unsupported “selling fast” claim, or a permanent “limited-time” label.
  • Do not put testimonials, ratings, unrelated product benefits, navigation lists, legal-policy prose, or a second promotion inside the box.
  • Verify the source, landing page, coupon, start, expiry, and expired state before publication. A valid-looking code that fails at checkout is still a broken offer.

Post types that use it

The postTypes frontmatter array is the source of truth for this matrix. Templates and QA tooling should compare the table against that array rather than maintaining a separate hidden list.

Post typeTypical useRequired adaptation
Product pageDiscount, gift, or shipping rule for one itemBind the offer to the selected variant and keep the normal price visible.
Category pagePromotion across an eligible collectionDefine included and excluded products; do not imply every filtered item qualifies.
Pricing pageTemporary plan saving or conditional account creditName eligible plans, billing term, renewal behavior, and whether the saving repeats.
Service pageTime-bound package or audience-specific consultation creditDefine scope, booking deadline, fulfillment window, and any capacity condition.
Buying guideVerified retailer deal attached to one evaluated optionDate-stamp the check, disclose commercial ties, and do not let the deal determine the verdict.
Best X for Y pageCurrent promotion for a shortlisted optionKeep ranking methodology independent and apply the same deal-checking standard to every option.
Review pageTested product with a verified reader codeSeparate product judgment from the incentive and disclose affiliate or sponsor relationships.
Use-case pageConditional incentive for a defined customer situationTie the benefit to the qualifying workflow or audience without inventing scarcity.

QA checklist

  • The box represents one genuine promotion with an approved campaign source.
  • The benefit includes its unit, calculation basis, and eligible item.
  • Time-bound language has an exact expiresAt timestamp, displayed date, time, and zone.
  • A non-expiring offer is conditional and contains no false scarcity language.
  • Audience, region, minimum spend, product restrictions, redemption caps, and material exclusions are visible where applicable.
  • The code is selectable text, the redemption method is stated, and the destination honors the offer.
  • Scheduled, active, and expired states were tested at both sides of their exact boundaries.
  • Expiry removes the active claim action and updates cached output and structured data.
  • The server-rendered page remains truthful when JavaScript is unavailable.
  • The heading order, keyboard path, focus behavior, state labels, and copy-code feedback are accessible.
  • Structured data describes a real visible product or service offer and matches price, currency, URL, availability, and validity.
  • No countdown resets, no unsupported scarcity appears, and the campaign has not become a permanent “limited-time” offer.
  • The verification date and operational owner are recorded for refresh and incident handling.
  • Mobile layout keeps the benefit, conditions, deadline, code, and action in logical reading order.

FAQ

The frequently asked questions below cover deadline requirements, expiry behavior, urgency wording, coupon presentation, and the limits of Offer structured data.

← All Academy tutorials

Ready to put it into practice?

Free check · 7-day trial · no credit card