All insights
SEO6 min read

Structured Data for SaaS: Beyond Basic JSON-LD

Most SaaS companies implement Organization schema and call it done. The companies winning rich results in search results go further — here's what they're implementing.

NC

Nextcraft Engineering Team

What Structured Data Actually Gets You

Structured data (JSON-LD is the format Google prefers) communicates machine-readable context to search engines. The payoff comes in two forms:

Rich results: Enhanced SERP displays — star ratings, FAQ dropdowns, article dates, breadcrumbs, event listings. These increase click-through rates significantly (studies show 20–30% CTR improvement for pages with rich results).

Better entity understanding: Even schemas that don't generate visible rich results help Google understand what your page is about, who created it, and how it relates to other entities. This can positively impact rankings for semantic queries.

The Foundation: Organization and Website Schema

Every SaaS site should have these in the root layout:

code
const organizationSchema = {
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Your Company",
  "url": "https://yourcompany.com",
  "logo": {
    "@type": "ImageObject",
    "url": "https://yourcompany.com/logo.png",
    "width": 200,
    "height": 60
  },
  "description": "One-sentence description of what you do",
  "sameAs": [
    "https://twitter.com/yourhandle",
    "https://linkedin.com/company/yourcompany",
    "https://github.com/yourcompany"
  ],
  "contactPoint": {
    "@type": "ContactPoint",
    "contactType": "customer support",
    "email": "support@yourcompany.com"
  }
};

const websiteSchema = {
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "Your Company",
  "url": "https://yourcompany.com",
  "potentialAction": {
    "@type": "SearchAction",
    "target": "https://yourcompany.com/search?q={search_term_string}",
    "query-input": "required name=search_term_string"
  }
};

The SearchAction on WebSite enables Google Sitelinks Search Box — a search field that appears directly in Google results for branded queries.

FAQ Schema: High-Value for SaaS Landing Pages

FAQ schema on pricing and feature pages can generate expandable FAQ dropdowns in SERPs — significant SERP real estate for high-intent queries.

code
const faqSchema = {
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "How much does [Product] cost?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Our pricing starts at $X/month for the Starter plan, which includes [features]. The Pro plan at $Y/month adds [features]. Enterprise pricing is custom — contact us for a quote."
      }
    },
    {
      "@type": "Question",
      "name": "Is there a free trial?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes, we offer a 14-day free trial on all plans. No credit card required."
      }
    },
    {
      "@type": "Question",
      "name": "Can I cancel anytime?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes. We don't lock you into long-term contracts. Cancel your subscription anytime from your account settings."
      }
    }
  ]
};

Best practices for FAQ schema:

  • Use actual questions your target users ask (check your support tickets, sales calls, and Search Console queries)
  • Answers should be complete in the schema — don't truncate
  • Match the FAQ content on the page exactly — discrepancies violate Google's guidelines
  • Aim for 3–8 questions per page

SoftwareApplication Schema for SaaS Products

This schema type is specifically designed for software applications and can generate rich results showing your star rating, operating system, and price:

code
const softwareSchema = {
  "@context": "https://schema.org",
  "@type": "SoftwareApplication",
  "name": "Your App Name",
  "applicationCategory": "BusinessApplication",
  "operatingSystem": "Web",
  "offers": {
    "@type": "Offer",
    "price": "49",
    "priceCurrency": "USD",
    "priceSpecification": {
      "@type": "UnitPriceSpecification",
      "price": "49",
      "priceCurrency": "USD",
      "billingIncrement": 1,
      "unitText": "MONTH"
    }
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "reviewCount": "127",
    "bestRating": "5",
    "worstRating": "1"
  },
  "description": "Your app description",
  "screenshot": "https://yourapp.com/screenshot.png"
};

Note: the aggregateRating must reflect real reviews. Fabricating reviews violates both Google's guidelines and basic ethics. Collect reviews on your site explicitly for this purpose.

HowTo Schema for Tutorial Content

If you publish tutorial content (step-by-step guides, technical how-tos), HowTo schema can generate rich results with visible steps:

code
const howToSchema = {
  "@context": "https://schema.org",
  "@type": "HowTo",
  "name": "How to Set Up Next.js with TypeScript",
  "description": "A step-by-step guide to creating a new Next.js project with TypeScript configuration.",
  "totalTime": "PT15M",
  "step": [
    {
      "@type": "HowToStep",
      "position": 1,
      "name": "Create a new Next.js project",
      "text": "Run `npx create-next-app@latest my-app --typescript` in your terminal.",
    },
    {
      "@type": "HowToStep",
      "position": 2,
      "name": "Configure TypeScript",
      "text": "Open tsconfig.json and set strict: true for maximum type safety.",
    }
  ]
};

Review Schema for Case Studies

Portfolio pages and case studies can use Review schema to highlight client feedback:

code
const caseStudySchema = {
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "How We Helped Acme Corp 3x Their Conversion Rate",
  "author": {
    "@type": "Organization",
    "name": "Nextcraft"
  },
  "review": {
    "@type": "Review",
    "reviewRating": {
      "@type": "Rating",
      "ratingValue": "5",
      "bestRating": "5"
    },
    "author": {
      "@type": "Person",
      "name": "Jane Smith",
      "jobTitle": "CTO",
      "worksFor": { "@type": "Organization", "name": "Acme Corp" }
    },
    "reviewBody": "Working with Nextcraft transformed our product. The performance improvements they delivered in 8 weeks would have taken our team 6 months."
  }
};

Implementation in Next.js

Keep schema generation clean with a utility:

code
// components/seo/JsonLd.tsx
export function JsonLd({ schema }: { schema: object }) {
  return (
    <script
      type="application/ld+json"
      dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
    />
  );
}

// In a page:
export default function PricingPage() {
  return (
    <>
      <JsonLd schema={faqSchema} />
      <JsonLd schema={softwareSchema} />
      <main>...</main>
    </>
  );
}

Validate every schema with Google's Rich Results Test before publishing. Invalid schema silently fails — it generates no rich results and wastes the opportunity.

Stay Informed.

Join 1,200+ founders and engineers receiving our monthly deep dives on product engineering, design, and growth.

Insights once a month. No spam. Unsubscribe anytime.