10/17/2026 · By Krish M

SaaS Structured Data Comparison Finds the Right Schema

The best structured data for a SaaS landing page depends on the page’s goal and the type of information a visitor is looking for. Use the table below to pick the schema that matches your intent, then follow the steps to add, test, and monitor the markup.

Quick comparison table

Schema typeIdeal page purposeRequired fieldsTypical SERP feature
FAQAnswer common buyer questions on a product overview pagequestion, answerFAQ rich result
How‑ToWalk a user through a setup or integration processstep, name, descriptionHow‑To carousel
ProductHighlight pricing, features, and availability on a pricing pagename, description, offers, aggregateRatingProduct rich result
ReviewShow third‑party or customer testimonials on a testimonial pageauthor, reviewRating, reviewBodyReview stars

Choose FAQ if you have a list of buyer questions, How‑To for step‑by‑step guides, Product for pricing or feature sheets, and Review when you want to surface testimonials.

When to use FAQ structured data

Screenshot of a SaaS homepage with highlighted How‑To and FAQ sections Photo by Stephen Phillips - Hostreviews.co.uk on Unsplash

FAQ markup tells search engines that the content is a question‑answer pair. It works best on pages that already list FAQs, such as a “Common Questions” section on a landing page.

Step 1 – Identify qualifying questions Open the page in your CMS and locate any `` or bullet list that reads like a question. If a question appears in natural language and the answer follows immediately, it is a candidate.

Step 2 – Add JSON‑LD Insert a `` block before the closing `

Choosing the right schema for your SaaS pages

When the goal of a page is to surface information that a potential buyer is actively searching for, the schema you pick should mirror that intent. For example, if a visitor lands on a “How to integrate our API” page, the search engine expects a step‑by‑step explanation, so the How‑To schema is the natural fit. If the page is a pricing sheet that lists plans, the Product schema tells Google that the page offers purchasable items and can unlock a rich result that shows the price next to the organic snippet.

When the page is a landing page with a FAQ section, the FAQ schema is the most straightforward. It lets Google render the question and answer pair directly in the search results, improving visibility and click‑through rates. In contrast, a testimonial or review page should use Review or Product schema if the review is attached to a product offer. Choosing the wrong schema can cause the markup to be ignored, so double‑check that the page’s primary content matches the schema’s intent before you start adding JSON‑LD.

Step‑by‑step: adding FAQ JSON‑LD

  1. Locate the FAQ block In the CMS, look for a section titled “Frequently Asked Questions” or a list that follows the pattern “What is X?” → “X is…”. Make sure each question ends with a question mark and the answer follows immediately.

  2. Create the JSON‑LD template

    {
      "@context": "https://schema.org",
      "@type": "FAQPage",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "Question text?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Answer text."
          }
        },
        …
      ]
    }
    

    Replace the ellipsis with each question‑answer pair. Keep the array sorted by relevance to the page.

  3. Insert the script Place the script just before the closing `` tag or after the FAQ section in the body, depending on your CMS’s recommended placement. If the CMS automatically injects script tags, use the editor’s “Custom Code” field.

  4. Validate the markup Copy the entire … block and paste it into the Rich Results Test. Make sure the test shows “FAQ rich result” and that all questions are parsed.

  5. Deploy and monitor After publishing, run the same test after 24 hours. If the Rich Results Test fails, double‑check that all questions are enclosed in a Question object and that the answer is inside acceptedAnswer.

Implementing How‑To schema for setup guides

A How‑To page often contains a numbered list of steps. The JSON‑LD should mirror that structure:

{
  "@context": "https://schema.org",
  "@type": "HowTo",
  "name": "Set up your account in 5 minutes",
  "step": [
    {
      "@type": "HowToStep",
      "name": "Create an account",
      "itemListElement": [
        {
          "@type": "HowToDirection",
          "text": "Go to signup.com and click “Register.”"
        }
      ],
      "image": "https://example.com/images/step1.png"
    },
    …
  ]
}

Tip: If a step contains sub‑steps, nest them inside an itemListElement. Include an image URL if the step shows a visual cue; this can enhance the carousel in SERPs.

After adding the script, test it with the Rich Results Test. If it flags missing required properties, add image or video fields. Once the markup passes, keep an eye on Search Console’s “Enhancements” tab; it will list the How‑To pages that are qualifying for the carousel.

Product schema on pricing and feature sheets

When a page lists product plans, the Product schema tells search engines that each plan is a purchasable item. A typical block looks like:

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Pro Plan",
  "description": "Advanced analytics and unlimited users.",
  "offers": {
    "@type": "Offer",
    "priceCurrency": "USD",
    "price": "99.00",
    "url": "https://example.com/pricing#pro",
    "availability": "https://schema.org/InStock"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.5",
    "ratingCount": "120"
  }
}

Repeat the block for each plan. If your pricing page shows a “Free” tier, use price: 0 and set priceValidUntil to indicate the offer’s duration. Search Console will flag products missing required fields, so double‑check that every plan has name, offers, and at least one priceCurrency.

Using Review schema for testimonials

For a testimonial page, wrap each customer quote in a Review object:

{
  "@context": "https://schema.org",
  "@type": "Review",
  "author": {
    "@type": "Person",
    "name": "Jane Doe"
  },
  "datePublished": "2023-07-15",
  "reviewBody": "This tool cut our onboarding time in half.",
  "reviewRating": {
    "@type": "Rating",
    "ratingValue": "5",
    "bestRating": "5"
  }
}

If the testimonial is tied to a product, nest the Review under a Product block. Make sure the reviewRating includes a bestRating; otherwise the markup will not pass validation.

Common mistakes that break markup

  1. Missing @context or @type – Search engines reject the script entirely.
  2. Using a plain `` tag without type="application/ld+json" – The parser ignores it.
  3. Incorrect nesting – For FAQ, each Question must contain an acceptedAnswer.
  4. Non‑unique name values – In How‑To steps, identical names can confuse the carousel.
  5. Trailing commas – JSON‑LD is strict; any trailing comma after the last property causes failure.

Run the Rich Results Test after each change; it will highlight any structural errors before you push to live.

Automating schema generation without losing judgment

A common question is whether AI can generate all the JSON‑LD for us. While a script can pull data from a CMS database and output a skeleton, the human role remains essential:

  • Validate intent – The system can’t tell if a page is truly a pricing sheet or a feature overview.
  • Handle edge cases – A plan that changes price frequently needs a priceValidUntil.
  • Review compliance – AI may omit required fields or duplicate data.
  • Adjust for changes – If you add a new FAQ, you must insert it into the array and preserve order.

In practice, we use a lightweight helper that reads the page’s content, pulls the necessary fields, and outputs a ready‑to‑paste JSON‑LD snippet. The marketer reviews the snippet, tweaks any missing values, and pushes it to the CMS. This workflow balances speed with accuracy and keeps the team in control of the final markup.

Monitoring performance in Search Console

After deployment, go to Search Console → Enhancements → FAQ (or HowTo, Product, Review). Search Console shows:

  • Coverage status – If any items are marked “Not indexed” or “Error”.
  • Rich results – How many pages are qualifying.
  • Issue details – For each error, a link to the problematic page and a snippet of the offending code.

Set up a weekly check: if an item drops from “Pass” to “Error”, investigate the JSON‑LD and the page content. Often the issue is a missing image URL or an expired priceValidUntil. Fix it quickly to prevent loss of SERP real estate.

Edge cases and advanced considerations

SituationRecommendation
A page has both FAQs and a product listUse separate schema blocks; FAQ for the FAQ section and Product for each plan.
A review page also shows a product feature listEmbed the Review inside the Product schema, linking review to the corresponding plan.
A How‑To page has videosAdd a video property to each HowToStep, providing a thumbnail and duration.
Pricing changes oftenImplement a server‑side script that updates the priceValidUntil field automatically when a plan’s price changes.
Multiple languagesDuplicate the JSON‑LD for each language, wrapping it in a @language property.

Checklist before going live

  1. Confirm schema type matches page purpose.
  2. Verify all required properties are present.
  3. Run Rich Results Test on the live URL.
  4. Publish and wait 24 hours.
  5. Check Search Console for errors.
  6. If errors appear, fix and re‑validate.
  7. Schedule a monthly review to catch any future content changes that break schema.

By following these steps, you’ll ensure that the structured data you add to your SaaS pages is both correct and effective, allowing search engines to surface rich snippets that match what your visitors are looking for.

Frequently Asked Questions

Yes, but only if the page genuinely contains both content types. For example, a pricing page can have Product markup for each plan and an FAQ block for payment questions. Adding unrelated schemas confuses crawlers and may cause warnings.

At least once a month, and after any major site redesign, CMS migration, or content update that changes URLs or pricing information.

Google’s Rich Results Test is the most reliable. Paste the live URL, review any error messages, and fix missing required properties before the page goes live.

Yes. The `offers.price` field must reflect the current price. Failing to update it can lead to “price mismatch” warnings and reduce the chance of a product rich result.

JSON‑LD is recommended because it keeps markup separate from visible content, reducing the risk of HTML errors. Microdata and RDFa are alternatives but are harder to maintain at scale.

Still have questions? Talk to our team.

Krish Mohanani

Krish Mohanani

Krish has spent years working inside SaaS SEO and content strategy, building organic growth that compounds instead of chasing one-off wins. Through Comppound, he now helps SaaS companies build that same kind of growth.

Was this article helpful?

Want your blog doing this every week?

This is what shows up once Comppound handles your content pipeline end to end. Book a call and we'll show you how it works for your site.