Reusable Neos CMS package that adds Schema.org structured data (JSON-LD) to your website. All content is editable via the Neos inspector — no YAML configuration needed for content.
| Schema Type | Scope | Description |
|---|---|---|
| Organization | All pages | Company name, logo, phone, email, social media |
| LocalBusiness | Homepage | Extends Organization with address, geo coordinates, service area |
| WebPage | All pages | Page name, description, dateModified |
| Service | Per page (opt-in) | Service type, description, area served |
| FAQPage | Per page (opt-in) | Aggregates all FaqItem-mixed nodes on a page into one JSON-LD |
Pick the constraint that matches your Neos version:
| Neos version | Composer constraint | Branch |
|---|---|---|
| Neos 8.x | ^1.0 or dev-neos-8 |
neos-8 |
| Neos 9.x | ^2.0 or dev-main |
main |
This branch targets Neos 9.
composer require upassist/neos-schemaorg:^2.0Or add to your composer.json:
{
"require": {
"upassist/neos-schemaorg": "^2.0"
},
"repositories": {
"upassist/neos-schemaorg": {
"type": "git",
"url": "git@github.com:UpAssist/neos-schemaorg.git"
}
}
}Add the LocalBusiness mixin to your homepage/site node type. This includes Organization automatically.
'Your.Site:Document.Home':
superTypes:
'UpAssist.Neos.SchemaOrg:Mixin.LocalBusiness': trueIf you only need Organization (no address/geo data), use it directly:
'Your.Site:Document.Home':
superTypes:
'UpAssist.Neos.SchemaOrg:Mixin.Organization': trueAdd the Service mixin to page types where editors should be able to define a service:
'Your.Site:Document.Page':
superTypes:
'UpAssist.Neos.SchemaOrg:Mixin.Service': trueService schema only renders when the editor fills in a Service type — leaving it empty means no Service JSON-LD is output.
WebPage schema is automatically rendered on all pages — no configuration needed. It uses the page title, meta description, and last modification date.
Add the FaqItem mixin to any NodeType that represents a single question/answer pair. The item must expose question and answer properties.
'Your.Site:Content.Faq.Item':
superTypes:
'UpAssist.Neos.SchemaOrg:Mixin.FaqItem': true
properties:
question:
type: string
answer:
type: stringThe package aggregates every FaqItem-mixed node on a document into a single FAQPage JSON-LD block. No wrapper NodeType is required — drop one or more items into a page and the schema is emitted automatically.
After adding the mixins, editors see a Schema.org tab in the Neos inspector with the following groups:
- Organization — Name, description, logo, phone, email, social media URLs
- Local Business — Street address, postal code, city, region, country, coordinates, area served
- Service — Service type, description, service area override
The package augments Neos.Neos:Page automatically via Page.fusion — no manual Fusion includes needed. Each component has @if conditions:
- Organization — renders on all pages if the site node has the mixin
- LocalBusiness — renders only on the homepage
- WebPage — renders on all pages (uses Neos.Seo meta description and title)
- Service — renders only when
schemaOrgServiceTypeis filled in - FAQPage — renders when at least one
FaqItem-mixed node exists on the document
All JSON-LD is only rendered in the live rendering mode (not in the Neos backend).
| Property | Type | Description |
|---|---|---|
schemaOrgName |
string | Organization name (falls back to site title) |
schemaOrgDescription |
string | Organization description |
schemaOrgLogo |
Image | Organization logo |
schemaOrgPhone |
string | Phone number |
schemaOrgEmail |
string | Email address |
schemaOrgSameAs |
string | Social media URLs (one per line) |
Extends Organization with:
| Property | Type | Description |
|---|---|---|
schemaOrgStreetAddress |
string | Street address |
schemaOrgPostalCode |
string | Postal code |
schemaOrgCity |
string | City |
schemaOrgRegion |
string | Region/province |
schemaOrgCountry |
string | Country code (default: NL) |
schemaOrgLatitude |
string | GPS latitude |
schemaOrgLongitude |
string | GPS longitude |
schemaOrgAreaServed |
string | Comma-separated list of locations |
| Property | Type | Description |
|---|---|---|
schemaOrgServiceType |
string | Type of service |
schemaOrgServiceDescription |
string | Service description (falls back to meta description) |
schemaOrgServiceAreaServed |
string | Service area (falls back to site-level area served) |
Marker mixin — adds no properties itself. The host NodeType must expose question and answer properties for the aggregator to pick up.
- Neos CMS 9.x
- PHP 8.2+
For Neos 8 support, use the neos-8 branch or install ^1.0.
Proprietary — UpAssist