Skip to main content

The type-selection process (WebPage / Service / Organization / Audience / Country)

Where this chapter sits

This is the core chapter of the guide. It organizes the decision process for choosing "which schema.org type to use on your own site" as a reproducible mental flow.

The subject is the service page of the fictional B2B SaaS Acme Workflow, introduced in the Introduction. We walk through the process of assembling the following structure.

WebPage (root type)
├── isPartOf → WebSite (parent site reference)
└── mainEntity → Service (the subject of this page)
├── provider → Organization (provider: Acme Inc.)
├── audience → Audience (target: operations staff)
└── areaServed → Country (service area: Japan)

We explain, in order, why each type was chosen and what was rejected.

Decision 1: Choosing WebPage for the root type

What we want to express

  • The metadata that this is "a single page of a corporate site"
  • The page title / description / URL
  • The site this page belongs to (isPartOf)
  • The subject of this page (mainEntity)

Candidates

Candidate typeSuitable useFit this time
WebPageA general-purpose web page✅ Adopted
ArticleNews / blog posts / explanatory articles❌ A service page is not an article
ProductA page for a physical product❌ A service is intangible
Organization (alone)A page with organization info only❌ The subject is service information

WebPage is a derived type of CreativeWork and is the most general-purpose root type, representing web pages in general. When a page "does not fit any of article / product / organization," like a service page, you choose WebPage.

Subclasses of WebPage

schema.org also has WebPage subclasses like AboutPage / ContactPage / FAQPage / ItemPage. If the nature of the page is clear (e.g., AboutPage for a "company overview"), choose a more specific subclass. For a service page, choosing ItemPage (product / service introduction) is also worth considering, but this guide adopts WebPage to prioritize generality.

Decision 2: Declaring exactly one page subject with mainEntity

As stated in Chapter 02, schema.org's official view is clear.

about can refer to multiple entities/topics, while mainEntity should be used for only the primary one

It clearly states this. The principle is to narrow the page's subject down to one.

What mainEntity means

The name and description that WebPage itself has are "information about the page itself," but mainEntity declares "what this page is talking about" in a separate layer. The search engine looks at this subject to understand the essence of the page.

Reference: schema.org/mainEntity / Schema.org Data Model — background notes (checked: 2026-06)

The problem with defining multiple mainEntity

Pages that carry multiple subjects often have an underlying site-design problem: "the subject is ambiguous." From the search engine's perspective too, a page whose subject is diffuse will not rank stably. If you have no choice but to handle multiple concepts, consider a different structure, such as expressing them as parallel elements with ItemList.

Decision 3: Choosing Service for the mainEntity type

The subject is "a SaaS called Acme Workflow." The next decision is which type to express it with.

Candidates

Candidate typeNatureFit this time
ServiceAn intangible service (provided continuously)✅ Adopted
ProductA tangible / one-time-purchase item❌ SaaS is not a buy-once item
SoftwareApplicationDownloadable software△ Unsuitable for SaaS (see below)
WebApplicationA web-based application△ A possible option (see below)

Service is under Intangible and represents "an intangible service provided continuously." A service used under a continuous contract, like SaaS, makes Service the most natural choice.

Why we did not choose SoftwareApplication / WebApplication
  • SoftwareApplication is mainly intended for installable software (desktop apps / mobile apps) and has a download URL / OS requirements / app store info. It does not fit SaaS.
  • WebApplication is a subtype of SoftwareApplication for web apps. If you wanted to strictly model "an app you use on the web after logging in," like Acme Workflow, this is also an option, but what a corporate site's service page expresses is not "the app itself" but "the service provided," so Service fits the context better.
  • If it were a page centered on "the app's feature spec" (e.g., an App Store-style feature list), consider switching to WebApplication.

Properties that are close to required for Service

PropertyRangeRole
nameTextThe service name
descriptionTextA concise description
providerOrganization / PersonThe provider (Decision 4)
serviceTypeTextThe service's category
audienceAudienceThe target (Decision 6)
areaServedAdministrativeArea, etc.The service area (Decision 7)

Everything except name / description is optional, but to hand rich information to the search engine, filling in provider / audience / areaServed is recommended.

Decision 4: Putting Organization in provider

You declare the service's provider with provider.

Person or Organization

  • Sole proprietor / freelancer → Person
  • Company / organization → Organization

Acme Workflow is a SaaS provided by the fictional Acme Inc., so we choose Organization.

The rationale from Google's guidelines

Organization Schema Markup (checked: 2026-05) recommends marking up organization information, and it is the foundation for things like logo display in the knowledge panel and search results. Beyond just referencing it as Service.provider, defining Organization uniquely across the whole site lets you reference it from multiple pages via @id (the @id strategy described later).

Key properties to fill in for Organization

PropertyRole
nameThe company name
urlThe corporate site's URL (canonical)
logoThe logo image URL
sameAsAn array of related URLs (Wikipedia / social media, etc.)
contactPointContact information (the ContactPoint type)
Organization's sameAs

In sameAs, you list URLs as an array, such as a Wikipedia page / official social media accounts / an official Crunchbase page. It becomes easier for Google to recognize that "these all point to the same organization," which improves the accuracy of knowledge panel consolidation.

Subtypes of Organization

Organization has subtypes like Corporation / EducationalOrganization / GovernmentOrganization / LocalBusiness.

  • For a corporation, you may choose Corporation (though plain Organization is also fine)
  • For a business with a physical storefront, LocalBusiness family is strongly recommended (it can express opening hours / address / map info)
  • For a SaaS provider whose main purpose is not a physical storefront, Organization is sufficient

When in doubt, choosing Organization is the safe bet. Google interprets the parent type Organization appropriately.

Decision 5: Referencing the parent WebSite with WebPage.isPartOf

isPartOf is a property that indicates "the higher-level resource this resource belongs to." From the WebPage's point of view, it references the WebSite (the whole site) it belongs to.

Why express the parent WebSite

  • You can define the whole site's name / URL in one place
  • You can share the WebSite definition across multiple pages and keep things consistent
  • It becomes the source for the "site name" display in Google search results (see Site names. The WebSite used for the site name must be placed on the home page)

Note that the old Sitelinks search box (SearchAction) was discontinued in 2024-11, so the search action is not included among the purposes of defining WebSite.

A minimal WebSite definition example

{
"@type": "WebSite",
"@id": "https://example.com/#website",
"url": "https://example.com/",
"name": "Acme Inc.",
"publisher": { "@id": "https://example.com/#organization" }
}

By making @id unique on a URL basis and referencing the Organization in publisher via @id, you can express the site structure cleanly.

Decision 6: Using Audience for mainEntity.audience

You declare the service's target users with audience.

The type hierarchy of Audience

Audience is under Intangible and is a general-purpose type representing target users in general. It has the following subtypes.

A decision tree for the Audience subclass

Nature of the target usersRecommended type
By company / industry (B2B SaaS / business tools / corporate services)BusinessAudience
Based on personal attributes (age / gender / lifestyle)PeopleAudience
Educational (students / teachers / learning-material targets)EducationalAudience
Medical (healthcare professionals / patients)MedicalAudience
None of the above / unknownAudience (general)

For Acme Workflow

Acme Workflow is a B2B SaaS for operations staff, so BusinessAudience is appropriate.

{
"@type": "BusinessAudience",
"audienceType": "Operations staff",
"name": "Operations staff at small and medium-sized businesses"
}

audienceType is a property that expresses the target as a string, and it is usable on Audience (and all subtypes).

Do not write audience as a string only

You sometimes see implementations that write "audience": "Operations staff" as a simple string, but this is invalid as a type. The range of schema.org's audience property is the Audience type, so always write it as an object in the form { "@type": "...", ... }. Otherwise you also lose the benefit of leveraging the type hierarchy (Google recognizing the target as structured information).

Decision 7: Using Country for mainEntity.areaServed

You declare the area where the service is provided with areaServed.

Range candidates

The range of areaServed is AdministrativeArea / GeoShape / Place / Text.

Candidate typeSuitable use
CountryAn entire country (e.g., Japan)
StateA prefecture / state
CityA municipality
AdministrativeAreaA general-purpose type for administrative divisions
GeoShapeA polygon of latitude/longitude
PlaceA specific place (a venue / store, etc.)
TextAn unstructured string (not recommended)

For Acme Workflow

Acme Workflow provides its service throughout Japan, so we use Country.

{
"@type": "Country",
"name": "Japan"
}

Country is a subtype of AdministrativeArea and is the type that represents a country. If you provide the service in multiple countries, make areaServed an array.

Including the ISO 3166 code

Including the ISO 3166-1 alpha-2 code (JP, etc.) in the identifier property makes it easier for the search engine to uniquely identify the country.

The @id strategy — designing references between objects

In a JSON-LD that contains multiple objects, how you assign @id greatly affects maintainability.

Conventions

  • Make the @id URL unique by appending a fragment (#xxx) to a URL base that represents the object
  • Use a concept name (#organization, #website, #webpage, #service) for the fragment name
  • Use the same @id across the whole site for the same concept

Examples

@idThe object it represents
https://example.com/#organizationThe site-wide Organization (Acme Inc.)
https://example.com/#websiteThe site-wide WebSite
https://example.com/services/workflow/#webpageThe WebPage of this service page
https://example.com/services/workflow/#serviceThe Service called Acme Workflow

Why these conventions

  • URL-based: it becomes globally unique as an identifier (@id is a URI, so using a URL is conventional)
  • Fragment: everything after # is not sent to the server, so it has no side effect as a URL
  • Concept name: just reading the @id tells you what object it is
  • Unified across the whole site: even if multiple pages reference the Organization, the search engine recognizes them as "the same Organization" as long as the @id matches

Typical @id collision patterns

  • Using a different Organization @id per page (https://example.com/page-a/#organization and https://example.com/page-b/#organization) → they are recognized as separate organizations
  • A dynamically generated @id (containing a timestamp or UUID) → it is treated as a different object when the page is updated
  • Writing @id as a simple string instead of a URL ("@id": "organization") → weak as an identifier, with a chance of clashing across multiple sites

A decision tree for applying this to your own site

So far we have shown the decision process using Acme Workflow as the subject. Below is a generalized set of branches for applying this to your own site.

Step 1: Decide the root type

Choose a WebPage subclass based on the nature of the page.

Nature of the pageRecommended root type
Service / product page / generalWebPage (or ItemPage)
Company overviewAboutPage
ContactContactPage
FAQFAQPage
CheckoutCheckoutPage
Search resultsSearchResultsPage

Step 2: Decide the mainEntity type

Decide what the page's subject is, and choose the type that represents it.

Page subjectmainEntity type
An intangible service (SaaS / consulting / professional services)Service
A tangible product / one-time purchaseProduct
An article / blog postArticle (or BlogPosting / NewsArticle)
An organization-introduction pageOrganization
An event announcementEvent
A whole FAQ pageWhen it is FAQPage, the subject is the QA list
A job postingJobPosting
A recipeRecipe
A videoVideoObject
A landing page (composite subject)Narrow it down to the single most primary entity

Step 3: Decide provider / publisher / author

Express the relevant parties according to the subject.

Subject typeRelated propertyRange
ServiceproviderOrganization / Person
Productmanufacturer / brandOrganization / Brand
Articleauthor / publisherPerson / Organization
Eventorganizer / performerOrganization / Person
RecipeauthorPerson / Organization

Step 4: Decide the target / area (as needed)

Declaring target / areaPropertyRange
Target usersaudienceAudience family (the decision tree in Decision 6)
Service areaareaServedCountry / State / City / Place
LanguageinLanguageLanguage / Text (IETF BCP 47, e.g., ja)

Step 5: Tie the relationships together with @id

Define the site-wide Organization / WebSite in one place, and reference them from each page via @id.

A summary of the rejected alternatives

To leave a trace of the decisions, here we organize the "options we did not adopt."

SituationAdopted typeRejected typeReason for rejection
Root typeWebPageArticleA service page is not an article
Root typeWebPageProductA service is intangible
Root typeWebPageItemPageThe more general WebPage is sufficient (easier to reuse on other pages when the site structure changes in the future)
SubjectServiceProductA continuous-contract service is not a Product
SubjectServiceSoftwareApplicationIt is not installable software
SubjectServiceWebApplicationA service page is not an app feature spec
ProviderOrganizationPersonA company, not an individual
TargetBusinessAudienceAudience (general)We want to express the industry context with a subtype
TargetBusinessAudienceA string onlyA range violation
AreaCountryPlaceIt is an entire country, so Place is excessive
AreaCountryTextStructured information is lost

What's next

So far we have completed the type-selection process. In the next chapter, 04. Implementation + validation + operations, we combine the types decided here to present the finished JSON-LD for Acme Workflow, and cover the validation steps with the Google Rich Results Test and the conventions for ongoing operations.