Mobile Trade-In Stack
Device trade-in pages with Product + Offer + MerchantReturnPolicy, FAQs, and breadcrumb navigation.
When to use this stack
- Mobile phone trade-in landing pages
- Trade-in quote pages with device eligibility
- Pages where FAQs clarify inspection and payout
What is included
Represents the device being traded in with specs and identity.
Describes the trade-in credit offer and submission link.
Clarifies device return and inspection policy for trade-ins.
Answers eligibility, inspection, and payout questions.
Provides navigation context for the trade-in page.
Properties across the bundle
Nested properties keep their parent path, such as offers.priceCurrency. Only publish values that match visible page content.
Required properties
- availability
- description
- itemListElement[].name
- itemOffered.@id
- mainEntity[].@type=Question
- mainEntity[].acceptedAnswer.text
- name
- offers.availability
- offers.price
- offers.priceCurrency
- price
- priceCurrency
- returnFees
- returnMethod
- returnPolicyCategory
- url
Recommended properties
- applicableCountry
- brand.name
- description
- eligibleRegion
- image
- itemListElement[].item
- mainEntity[].acceptedAnswer.text
- mainEntity[].author.name
- mainEntity[].name
- merchantReturnDays
- offers.url
- priceValidUntil
- returnShippingFeesAmount
- sku
- url
Combined JSON-LD
Paste this as one script tag, then replace every example value with data from the live page.
[
{
"@context": "https://schema.org",
"@type": "Product",
"@id": "https://www.example.com/trade-in/phone-x#product",
"name": "Example Phone X",
"description": "Trade in your Example Phone X for instant credit toward a new device.",
"url": "https://www.example.com/trade-in/phone-x",
"image": "https://www.example.com/images/phone-x.webp",
"brand": { "@type": "Brand", "name": "Example" },
"sku": "EX-IPH-10",
"offers": {
"@type": "Offer",
"@id": "https://www.example.com/trade-in/phone-x#offer",
"name": "Phone X Trade-In Credit",
"price": "300.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://www.example.com/trade-in/phone-x#start",
"itemOffered": { "@id": "https://www.example.com/trade-in/phone-x#product" },
"eligibleRegion": "US",
"hasMerchantReturnPolicy": "https://www.example.com/trade-in/phone-x#policy"
}
},
{
"@context": "https://schema.org",
"@type": "Offer",
"@id": "https://www.example.com/trade-in/phone-x#offer",
"name": "Phone X Trade-In Credit",
"price": "300.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://www.example.com/trade-in/phone-x#start",
"itemOffered": { "@id": "https://www.example.com/trade-in/phone-x#product" },
"eligibleRegion": "US",
"hasMerchantReturnPolicy": "https://www.example.com/trade-in/phone-x#policy"
},
{
"@context": "https://schema.org",
"@type": "MerchantReturnPolicy",
"@id": "https://www.example.com/trade-in/phone-x#policy",
"name": "Trade-In Inspection Policy",
"url": "https://www.example.com/trade-in/phone-x",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 14,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn",
"applicableCountry": "US"
},
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What condition qualifies for the full credit?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Devices must power on, have no cracked screen, and include no activation locks."
}
},
{
"@type": "Question",
"name": "How long does inspection take?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Inspection is completed within 3-5 business days after receipt."
}
},
{
"@type": "Question",
"name": "When is the credit applied?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Credits are applied to your account within 48 hours of inspection approval."
}
}
]
},
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.example.com" },
{ "@type": "ListItem", "position": 2, "name": "Trade-In", "item": "https://www.example.com/trade-in" },
{ "@type": "ListItem", "position": 3, "name": "Phone X", "item": "https://www.example.com/trade-in/phone-x" }
]
}
]Implement and verify
- 01
Start with the live page
Confirm titles, prices, availability, policies, and visible FAQ content before generating markup.
- 02
Add one JSON-LD script
Use the combined example as a template in the document head or before the closing body tag.
- 03
Complete regional details
Fill shipping destinations and timing for every region the page actually serves.
- 04
Link the return policy
Use a stable MerchantReturnPolicy URL and keep its terms synchronized with the page.
- 05
Match visible answers
Add only FAQs that users can read on the same page, with identical answers.
- 06
Validate after changes
Run Rich Results Test after implementation and whenever price, availability, or policy data changes.
Common errors and fixes
- Missing currency or availability
Use ISO currency codes and complete schema.org availability URLs in Offer data.
- Incomplete shipping details
Include shippingDestination.addressCountry and deliveryTime.transitTime with units.
- Return policy is not connected
Reference MerchantReturnPolicy from the Offer and provide a stable public policy URL.
- FAQ answers differ from the page
Keep structured FAQ answers identical to visible answers.
Stack FAQs
Should I list multiple devices on one page?
If multiple devices are listed, add separate Product + Offer entries for each model shown.
Do I need a return policy for trade-ins?
Yes. MerchantReturnPolicy clarifies inspection windows and return requirements for devices.