# Schema markup for SaaS: the JSON-LD worth adding for AI search

> Page-by-page JSON-LD for SaaS sites: Organization, SoftwareApplication with plans and prices, FAQPage and Article, and what Google and Microsoft say about it.

Canonical page: https://getrankroot.com/guides/schema-markup-for-saas · Updated 2026-10-18

Let's start with what's documented, because a lot of schema advice for AI isn't. Google says there's no special schema.org markup you need to appear in AI Overviews or AI Mode, and that structured data should match the visible text on the page. Microsoft's guidance for Copilot says schema helps label content as a product, review, FAQ or event so machines can interpret it with confidence. So treat JSON-LD as a way to remove ambiguity about who you are and what you sell, not as a ranking trick. This guide is the SaaS-specific follow-up to [schema markup for AI search](https://getrankroot.com/guides/schema-markup-for-ai-search).

## Which page gets which type

- Homepage: Organization and WebSite. Add SoftwareApplication here too if you sell one product.
- Product and pricing pages: SoftwareApplication with offers for each plan.
- Blog posts, guides and comparison pages: Article or BlogPosting with dates and author.
- FAQ sections: FAQPage, with exactly the questions and answers shown on the page.
- Docs and deep pages: BreadcrumbList helps describe where a page sits in the site.

## Organization: once, on the homepage

Google says Organization markup has no required properties and recommends adding as many relevant ones as you can, on your homepage or an about page, not on every page. The logo should be at least 112x112 pixels. sameAs links to your profiles elsewhere are what tie your brand together across the web. Give it an @id so other blocks can point to it.

```
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://acme.com/#org",
      "name": "Acme",
      "url": "https://acme.com",
      "logo": "https://acme.com/logo-512.png",
      "description": "Uptime monitoring and status pages for small engineering teams.",
      "sameAs": [
        "https://www.linkedin.com/company/acme",
        "https://github.com/acme",
        "https://x.com/acme"
      ]
    },
    {
      "@type": "WebSite",
      "@id": "https://acme.com/#website",
      "url": "https://acme.com",
      "name": "Acme",
      "publisher": { "@id": "https://acme.com/#org" }
    }
  ]
}
</script>
```

## SoftwareApplication with your real plans

For a SoftwareApplication rich result, Google requires name, offers.price (use 0 for free) and either aggregateRating or review, and recommends applicationCategory and operatingSystem. applicationCategory must be one of Google's supported values, such as BusinessApplication, DeveloperApplication, FinanceApplication or SecurityApplication. Even if you have no ratings to show, the markup still states your product, category and prices unambiguously.

For subscription prices, schema.org's UnitPriceSpecification lets you say what the price is per: referenceQuantity with the unit code MON (month) or ANN (year), or billingDuration for a fixed contract length.

```
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "SoftwareApplication",
  "name": "Acme Monitoring",
  "applicationCategory": "DeveloperApplication",
  "operatingSystem": "Web",
  "description": "Uptime monitoring with 30-second checks, alerts and public status pages.",
  "url": "https://acme.com",
  "publisher": { "@id": "https://acme.com/#org" },
  "offers": [
    {
      "@type": "Offer",
      "name": "Free",
      "price": "0",
      "priceCurrency": "USD",
      "url": "https://acme.com/pricing"
    },
    {
      "@type": "Offer",
      "name": "Team",
      "price": "29",
      "priceCurrency": "USD",
      "url": "https://acme.com/pricing",
      "priceSpecification": {
        "@type": "UnitPriceSpecification",
        "price": "29",
        "priceCurrency": "USD",
        "referenceQuantity": { "@type": "QuantitativeValue", "value": 1, "unitCode": "MON" }
      }
    }
  ]
}
</script>
```

Only add aggregateRating or review if those ratings are shown on the page and follow Google's review snippet guidelines. Made-up or unsupported ratings are a fast way to lose trust with search engines.

## FAQPage: worth it, but not for rich results

Google stopped showing FAQ rich results in Search on May 7, 2026, and has since removed the documentation for them, so no site gets the expandable result anymore. The FAQPage type is still valid schema.org, and question-and-answer content mirrors how people prompt AI assistants. In our [State of AI Visibility 2026](https://getrankroot.com/research/state-of-ai-visibility-2026) study, 70.8% of 538 SaaS and AI homepages had no Q&A content at all. The [FAQ generator](https://getrankroot.com/tools/faq-generator) builds the HTML and the matching FAQPage JSON-LD together.

## Article for guides and comparisons

Mark up blog posts, guides and "X vs Y" pages as Article or BlogPosting with headline, datePublished, dateModified, author and publisher pointing to your Organization @id. Keep dateModified honest: change it when the content actually changes.

## Mistakes that undo the work

- Prices in JSON-LD that don't match the pricing page. Update both together.
- Marking up content that isn't visible on the page.
- Different product or company names across pages, directories and profiles.
- Injecting JSON-LD only with client-side JavaScript. Google renders JavaScript, but many AI crawlers read raw HTML and won't see it. Put it in the server-rendered HTML.
- Several plugins or scripts each adding their own Organization block with different details.

## How SaaS sites are doing

In the same study, 33.6% of homepages had no JSON-LD at all, 38.1% had no product or organization schema and 8.9% had no linked brand profiles. Structured data was the weakest of the four areas we measured.

## Generate and validate

Build Organization, SoftwareApplication, FAQPage and WebSite blocks with the free [schema generator](https://getrankroot.com/tools/schema-generator), then validate them with the [Schema.org validator](https://validator.schema.org/) and Google's [Rich Results Test](https://search.google.com/test/rich-results). The free scan below checks whether your homepage declares an entity, links its profiles and makes pricing readable.

## Sources

- [Google Search Central: AI features and your website (read 2026-10-18)](https://developers.google.com/search/docs/appearance/ai-features)
- [Google Search Central: Software app (SoftwareApplication) structured data (read 2026-10-18)](https://developers.google.com/search/docs/appearance/structured-data/software-app)
- [Google Search Central: Organization structured data (read 2026-10-18)](https://developers.google.com/search/docs/appearance/structured-data/organization)
- [Google Search Central: Latest documentation updates, FAQ rich result removed (read 2026-10-18)](https://developers.google.com/search/updates)
- [schema.org: UnitPriceSpecification (read 2026-10-18)](https://schema.org/UnitPriceSpecification)
- [Microsoft Advertising: Optimizing your content for inclusion in AI search answers (Oct 2025)](https://about.ads.microsoft.com/en/blog/post/october-2025/optimizing-your-content-for-inclusion-in-ai-search-answers)

## FAQ

### SoftwareApplication, WebApplication or Product?

For software, use SoftwareApplication or its schema.org subtype WebApplication. Both describe software and carry offers. Product is meant for physical and general goods; it's fine for hardware or bundles, but SoftwareApplication says more about a SaaS product.

### Does schema get me recommended by ChatGPT?

No AI vendor documents schema as a ranking factor. It helps engines and agents identify your company and product and read facts like pricing correctly, which matters when they describe or compare you.

### Should I add my G2 or Capterra rating?

Only if the rating is displayed on the page and complies with Google's review snippet guidelines. Otherwise leave aggregateRating out; the rest of the markup still works.

### JSON-LD or microdata?

JSON-LD. Google supports both, but JSON-LD sits in one script tag, is easier to keep in sync with your pricing and is what most generators produce.

## Check your site

Run the free audit at https://getrankroot.com/ or call `GET https://getrankroot.com/api/audit?url=example.com`.

## More guides

- [How to get your product recommended by ChatGPT, Perplexity and Claude](https://getrankroot.com/guides/how-to-get-recommended-by-chatgpt.md)
- [What is llms.txt? Format, examples and a free generator](https://getrankroot.com/guides/what-is-llms-txt.md)
- [robots.txt for AI crawlers: GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot](https://getrankroot.com/guides/robots-txt-ai-crawlers.md)
- [Schema markup for AI search: the JSON-LD that helps AI describe you](https://getrankroot.com/guides/schema-markup-for-ai-search.md)
- [How to make your SaaS agent-ready (MCP, OpenAPI, llms.txt)](https://getrankroot.com/guides/make-your-saas-agent-ready.md)
- [How to track traffic from ChatGPT, Perplexity and Claude in GA4](https://getrankroot.com/guides/track-ai-traffic-ga4.md)
- [GEO vs SEO: what generative engine optimization actually changes](https://getrankroot.com/guides/geo-vs-seo.md)
- [How to check if ChatGPT mentions your brand (manual method + tools)](https://getrankroot.com/guides/check-if-chatgpt-mentions-your-brand.md)
- [llms.txt for WordPress: how to add it (manual, Yoast, plugins)](https://getrankroot.com/guides/llms-txt-wordpress.md)
- [Should you block GPTBot? AI training vs search crawlers explained](https://getrankroot.com/guides/should-you-block-gptbot.md)
- [GPTBot vs OAI-SearchBot vs ChatGPT-User: what to block](https://getrankroot.com/guides/gptbot-vs-oai-searchbot-vs-chatgpt-user.md)
- [ClaudeBot vs Claude-SearchBot vs Claude-User explained](https://getrankroot.com/guides/claudebot-vs-claude-searchbot-vs-claude-user.md)
- [What is an AI visibility score? (and how to check yours)](https://getrankroot.com/guides/what-is-an-ai-visibility-score.md)
