Skip to content
All articles
Marketing6 min read

SEO and Product Feeds for Food Delivery: The Setup That Actually Drives Orders

Most delivery storefronts are invisible to Google and missing from Meta Catalog. Toster fixes both: per-tenant sitemaps, JSON-LD on every product, and auto-generated feeds for Meta, Google, and TikTok.

Why Most Delivery Storefronts Don't Rank on Google

Open the page source of a typical delivery chain's storefront and you'll find three things wrong: a single-page React app that doesn't pre-render product pages, no schema.org/Product markup, and a sitemap that lists the homepage and not much else. The result: Google's crawler sees a near-empty shell and the chain shows up for branded searches only. "Sushi delivery Prague" goes to the aggregators.

Fixing this isn't glamorous. It's three boring pieces of infrastructure that have to be done correctly: clean URLs, structured data, and product feeds. Toster ships all three out of the box.

1. Clean Slugged URLs

Every product and category in Toster has a stable, human-readable slug. Instead of /products/clx7-9j3-uuid the URL is /products/philadelphia-roll. Slugs are auto-generated from the product name in the tenant's primary language and remain stable across renames. Categories work the same way: /category/rolls not /category/clx8-9j4-uuid.

Stable slugs matter for SEO because Google indexes the URL itself as a ranking signal. A URL containing the search term outranks one that doesn't, all else being equal. They also matter for shareability — a customer who shares a link in a chat sees "Philadelphia Roll" in the URL preview, not a UUID.

2. JSON-LD on Every Product Page

Structured data is how you tell Google "this page is a product, here's the price, the rating, the availability." Toster injects a schema.org/Product + Offer JSON-LD block on every product page:

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Philadelphia Roll",
  "image": "https://cdn.toster.co/p/philadelphia-roll.jpg",
  "description": "8 pieces. Salmon, cream cheese, cucumber, nori, rice.",
  "offers": {
    "@type": "Offer",
    "price": "299",
    "priceCurrency": "CZK",
    "availability": "https://schema.org/InStock"
  }
}

When Google sees this, it can render the product in rich results — with a price, a thumbnail, and a star rating if you've connected reviews. Click-through rates on rich results are 2–3x higher than plain text results, which means the same ranking position drives meaningfully more traffic.

Open Graph and Twitter Card meta tags ship in the same head element. A link to a product pasted into WhatsApp, Telegram, or Slack now renders a proper preview card with the product image, name, and price — the difference between a customer tapping through and ignoring the link.

3. Per-Tenant Sitemap Hierarchy

Toster generates a sitemap index at /sitemap.xml that points to one subsitemap per tenant. Each subsitemap lists every active product and category URL, with <lastmod> dates that update automatically when you edit a product. Google's crawler reads the index, discovers every storefront, and revisits changed pages within hours.

The sitemap is generated lazily on request and cached for an hour — no cron job to maintain, no stale entries when you launch a new menu item. The same path is wired into robots.txt so Google finds it without you submitting anything in Search Console (though submitting still speeds up the first crawl).

4. Auto-Generated Product Feeds for Paid Channels

Paid social and shopping channels need a separate file: a structured product feed, refreshed daily, that they ingest into their ad platforms. Toster ships three formats from the same data:

  • Meta CSV/api/public/feed/meta.csv — for Meta Commerce Manager (Facebook/Instagram catalog). Required for catalog ads, dynamic retargeting, and Advantage+ Shopping campaigns.
  • Google XML/api/public/feed/google.xml — for Google Merchant Center. Required for Shopping ads and free Shopping listings in Google search.
  • TikTok CSV/api/public/feed/tiktok.csv — for TikTok Business Center catalog. Required for Video Shopping Ads and TikTok Shop integration.

Each feed reflects current inventory: out-of-stock items are marked, prices are current, images use your CDN URLs. Configure the feed URL once in each platform; they re-fetch on their own schedule (Meta hourly, Google daily, TikTok 6-hourly). No manual exports, no broken catalogs after a menu update.

5. The REST API for Partners and Headless Storefronts

Not everyone wants to use Toster's React storefront. Aggregator partners, white-label resellers, and chains that already have a custom storefront need the data, not the UI. Toster exposes the same product catalogue via a public, unauthenticated REST API:

  • GET /api/public/products — paginated list, filterable by category
  • GET /api/public/product/:slug — single product with modifiers and images
  • GET /api/public/categories — full category tree
  • GET /api/public/category/:slug — products in a category

Combined with the new POST /api/integrations/orders/import endpoint (authenticated with a scoped API key), a partner can pull your full menu, render it in their own UI, and post orders straight back into Toster — the order shows up in your dispatcher console exactly as if it came from your own storefront. The legacy Cyrillic Telegram-notifier text format and a clean JSON format are both accepted, so a partner that's already integrated with the older notifier pipeline can switch with a single URL change.

What This Looks Like in Practice — A 30-Day Picture

A new tenant turning all of this on from a cold start typically sees:

  • Days 1–7: Google crawls the sitemap, indexes 200–500 product URLs depending on menu size.
  • Days 7–14: First branded searches start showing rich results (image + price). CTR on those queries goes up.
  • Days 14–21: Long-tail unbranded queries ("philadelphia roll prague delivery") start appearing in Search Console with impressions but few clicks — you're now indexed but not yet ranking.
  • Days 21–30: Meta Catalog ads using the auto-generated feed start outperforming static creatives. Dynamic retargeting becomes possible — customers who viewed a product but didn't order see that exact product in their Instagram feed.

What You Should Do Now

  • Verify your storefront has product slugs — open any product page, the URL should contain the product name, not a UUID. If it doesn't, your tenant predates the slug migration and Toster will generate slugs on next save of each product.
  • Open your-storefront.com/sitemap.xml — you should see your tenant's URL listed in the index. If it's not, contact support.
  • Set up Meta Commerce Manager with the Meta CSV feed URL. Use it to launch a catalog-based retargeting campaign.
  • Submit Google Merchant Center with the Google XML feed URL. Free Shopping listings appear within a few days; paid Shopping ads need a campaign.
  • If you have partners who currently send orders via Telegram bot, issue them an API key (Settings → API Keys, scope orders:write) and point them at POST /api/integrations/orders/import. They drop the Telegram intermediary entirely.

The Unglamorous Truth

Most marketing posts will tell you SEO and paid social are different worlds. They're not. They run on the same data — a clean product catalog with stable URLs, structured metadata, and live availability — exposed in different formats. The chains that get this infrastructure right once stop fighting their tooling and start getting compounding returns: more organic traffic, more efficient ads, more partner integrations, less manual work. The chains that don't keep paying the aggregators their 30% commission for visibility they could be earning themselves.

See Toster in action

Everything in this article is built into the platform. Book a 30-minute demo.

Book a demo