--- title: Google Search Fields description: Use typed required and recommended properties for Google Search structured data features. --- Unhead types the Google-supported properties used by its Search feature helpers. The types also resolve nested identities, URLs, dates, and known Schema.org relations. Google changes feature requirements independently of Unhead releases. Check the [structured data feature gallery](https://developers.google.com/search/docs/appearance/structured-data/search-gallery) before publishing. Extra Schema.org properties still pass through to JSON-LD. ## Composed features ### Profile page Use `defineWebPage()` with `ProfilePage`. An inline Person or Organization becomes the page's `mainEntity`. ```ts defineWebPage({ '@type': 'ProfilePage', 'dateCreated': new Date('2026-01-01'), 'mainEntity': definePerson({ name: 'Ada Lovelace', alternateName: 'ada', identifier: 'profile-1', interactionStatistic: { '@type': 'InteractionCounter', 'interactionType': 'FollowAction', 'userInteractionCount': 42, }, }), }) ``` ### Q&A page Register a `QAPage` and one Question. The Question resolver links itself as `mainEntity`. ```ts useSchemaOrg([ defineWebPage({ '@type': 'QAPage', }), defineQuestion({ name: 'How should this be configured?', answerCount: 1, suggestedAnswer: { text: 'Use the typed helper.', author: { '@type': 'Organization', 'name': 'Unhead', }, datePublished: new Date('2026-01-02'), url: '/answers/typed-helper', }, }), ]) ``` ### Speakable content Provide either `cssSelector` or `xPath`. The type rejects an object containing both. ```ts defineArticle({ headline: 'Release notes', speakable: { cssSelector: ['.headline', '.summary'], }, }) ``` ### Paywalled content Set `isAccessibleForFree` to `false`, then describe each paywalled section with a `WebPageElement`. ```ts defineArticle({ headline: 'Subscriber report', isAccessibleForFree: false, hasPart: { cssSelector: '.paywall', isAccessibleForFree: false, }, }) ``` ### Carousel Summary-page carousels use `ListItem.position` and `ListItem.url`. ```ts defineItemList({ itemListElement: [ defineListItem({ position: 1, url: '/products/one', }), defineListItem({ position: 2, url: '/products/two', }), ], }) ``` ### Video enhancements Video supports Clip key moments, BroadcastEvent livestream details, interaction counts, region restrictions, and SeekToAction URL patterns. `contentUrl` or `embedUrl` can be used without the generic `url` property. ```ts defineVideo({ name: 'Launch stream', thumbnailUrl: '/poster.jpg', uploadDate: new Date('2026-01-01'), contentUrl: '/video.mp4', regionsAllowed: ['AU', 'NZ'], hasPart: { name: 'Introduction', startOffset: 0, url: '/watch?t=0', }, potentialAction: { target: '/watch?t={seek_to_second_number}', 'startOffset-input': 'required name=seek_to_second_number', }, }) ``` ## Other typed Google properties The existing helpers also expose these Google-supported property groups: - Dataset funding, identifiers, measurement techniques, parts, catalogs, and downloads - Event identity unions, repeated previous dates, and offer validity - Image creator, credit, copyright, and license metadata - Job posting remote locations, credentials, identifiers, and experience substitution - Local business departments, coordinates, menus, ratings, and reviews - Organization contact points, legal identifiers, loyalty tiers, return policies, and shipping conditions - Product variants, categories, certifications, audiences, identifiers, member pricing, sizes, and 3D models - Recipe sections, ratings, repeated images and yields, and Person or Organization authors - Review subjects, Person or Organization authors, and positive or negative notes Required property alternatives are represented as unions where the same helper does not serve a broader Schema.org use case. Examples include Offer price sources, AggregateRating counts, remote job locations, SoftwareApplication ratings, and speakable selectors.