Skip to content

Drop the $0 trial Offer so the app never reads as free - #275

Merged
Programcode merged 1 commit into
mainfrom
seo/trial-offer-schema
Oct 29, 2026
Merged

Programcode merged 1 commit into
mainfrom
seo/trial-offer-schema

Conversation

@Programcode

@Programcode Programcode commented Oct 29, 2026 •

Copy link
Copy Markdown
Owner

The DebateOwl app has no free plan: a 3-day free trial, then Pro at $5/month. Two places on debateowl.com could be read as saying there is a free plan.

What changed

  • SoftwareApplication JSON-LD (/, /debateowl-pricing, /best-ai-debate-tools, the three debateowl-vs-* pages): the Offer named "Free trial" with price: "0" is gone. There is now one Pro Offer at price: "5" with the existing UnitPriceSpecification (billingDuration: P1M, tax not included). Its description states the 3-day trial and that there is no free plan. Both copies changed together: src/prerender/entry.tsx (home page) and SOFTWARE in scripts/generate_seo_content.py (generated pages).
  • llms.txt: the bullet labelled Free plan: is now Trial and free tools:. The sentence is unchanged and still says the app has no free plan. I didn't use Pricing: because the bullet just above it already has that label. The freePlan key in site.json keeps its name: it's never rendered, and renaming it would touch three locales, two scripts and a test for no reader-facing gain.
  • public/ was regenerated with python3 scripts/generate_seo_content.py, with no hand edits. The only generated changes are the five Offer blocks and the llms.txt line.

The home-page FAQ ("Is DebateOwl free?") and the comparison-table rows already deny a free plan in their own wording, so I left them alone.

Why one paid Offer rather than a trial Offer with eligibleDuration

  • Google's SoftwareApplication guide says: "If the app is available without payment, set offers.price to 0." Any 0-price Offer in the graph tells Google the app can be had without paying. Renaming that Offer doesn't change how Google reads it.
  • schema.org defines eligibleDuration as "the duration for which the given offer is valid" (a QuantitativeValue). That is how long the offer stays valid, not how long a trial lasts. Putting P3D there would claim the price only holds for three days.
  • The trial needs no card and doesn't convert into a subscription by itself, so a two-step price specification ($0 for 3 days, then $5) would describe billing that doesn't happen.

That leaves one Offer for what is actually sold, $5 a month, with the trial stated in plain text.

Before

"offers":[
  {"@type":"Offer","name":"Free trial","price":"0","priceCurrency":"USD","description":"3-day free trial, no credit card required. The DebateOwl app has no free plan (3-day free trial, then $5/month); the separate tools at /tools are free with no account."},
  {"@type":"Offer","name":"Pro","price":"5","priceCurrency":"USD","description":"Monthly subscription, billed plus tax.","priceSpecification":{"@type":"UnitPriceSpecification","price":"5","priceCurrency":"USD","billingDuration":"P1M","valueAddedTaxIncluded":false}}
]

After

"offers":[
  {"@type":"Offer","name":"Pro","price":"5","priceCurrency":"USD","description":"Monthly subscription, billed plus tax. New accounts get a 3-day free trial first, no credit card required. The DebateOwl app has no free plan (3-day free trial, then $5/month); the separate tools at /tools are free with no account.","priceSpecification":{"@type":"UnitPriceSpecification","price":"5","priceCurrency":"USD","billingDuration":"P1M","valueAddedTaxIncluded":false}}
]

Verification

GitHub Actions is billing-blocked, so this is a local pass at the head commit, not a CI pass. NODE_OPTIONS=--max-old-space-size=3072 npm run verify exited 0:

  • docs check, jargon check, lint and typecheck passed
  • unit tests: 757 of 757; collaboration: 30 of 30; edge tests passed
  • build: sitemap: 62 URLs; check-site: 65 HTML files, sitemap and llms.txt resolve; no problems (this parses every page's JSON-LD); check-links: 62 sitemap URLs … no problems
  • service-worker offline test and the desktop Chromium @smoke suite (47 of 47) passed

No test asserted the old Offer shape, so no tests changed. Nothing under supabase/ changed.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Pricing Information
    • Pricing details now clarify that new accounts receive a three-day free trial without a credit card, followed by Pro at $5 per month.
    • Clarified that the app has no free plan, while free tools are available without an account.
    • Updated descriptions across the pricing and comparison pages to present the trial and subscription as one Pro offer.

Google treats an Offer priced 0 as an app available without payment, so
the "Free trial" Offer made DebateOwl look like it had a free tier. The
SoftwareApplication now has one Pro Offer at $5/month (P1M
UnitPriceSpecification), and its description states the 3-day trial.
The llms.txt bullet that denies a free plan was labelled "Free plan:";
it is now "Trial and free tools:".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Caution

Review failed

The pull request is closed.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between b4e51ef and 33fb135.

Files selected for processing: 8
  • public/best-ai-debate-tools/index.html
  • public/debateowl-pricing/index.html
  • public/debateowl-vs-chatgpt/index.html
  • public/debateowl-vs-debateclub/index.html
  • public/debateowl-vs-windebate/index.html
  • public/llms.txt
  • scripts/generate_seo_content.py
  • src/prerender/entry.tsx

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

Walkthrough

The change removes separate zero-price trial offers from SoftwareApplication structured data. Trial terms now appear in Pro offer descriptions across generated and prerendered pages. The llms.txt pricing label changes to “Trial and free tools.”

Changes: Pricing metadata

Layer / File(s) Summary
Update trial and Pro offer metadata
scripts/generate_seo_content.py, src/prerender/entry.tsx, public/best-ai-debate-tools/index.html, public/debateowl-pricing/index.html, public/debateowl-vs-*/index.html, public/llms.txt
The structured data removes the separate zero-price trial offer and places trial terms in the Pro offer description. Monthly pricing and its price specification remain. The llms.txt pricing label changes to “Trial and free tools.”

Estimated code review effort: 2 (Simple) | ~10 minutes

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Essentials by visiting https://app.coderabbit.ai/settings/billing.

Comment @coderabbitai help to get the list of available commands.

@Programcode
Programcode marked this pull request as ready for review October 29, 2026 17:33
Copilot AI balanced review requested due to automatic review settings October 29, 2026 17:34
@Programcode
Programcode merged commit ca4723a into main Oct 29, 2026
3 of 9 checks passed

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants