Main Entity of a Web Page

Target group: Developers


A WebPage type has a property mainEntity, which indicates the primary content of a page. Every type is allowed - although some types doesn’t make sense (e.g. a breadcrumb cannot be the primary content).


There can be only one main entity at a time. If more than one main entity is set, the last one added has priority. The ones set before are rendered as root types.

Using the API

The main entity of a web page can be defined with the API. Let’s start with an example, which sets a product as the primary content:

$aggregateRating = (new \Brotkrueml\Schema\Model\Type\Product())
   ->setProperty('ratingValue', '4')
   ->setProperty('reviewCount', '126')

$product = (new \Brotkrueml\Schema\Model\Type\Product())
      'name' => 'Some fancy product',
      'color' => 'blue',
      'material' => 'wood',
      'image' => '',
      'aggregateRating' => $aggregateRating,


The above example is rendered as JSON-LD. Let’s assume the WebPage type is set to ItemPage - either in the page properties or via the API or a view helper.

   "@context": "",
   "@type": "ItemPage",
   "mainEntity": {
      "@type": "Product",
      "aggregateRating": {
         "@type": "AggregateRating",
         "ratingValue": "4",
         "reviewCount": "126"
      "color": "blue",
      "image": "",
      "material": "wood",
      "name": "Some fancy product"


If the WebPage type is not defined, because in the extension configuration the according setting is disabled, then the main entity is rendered as a root type.

Using the view helpers

You can define the main entity also in a view helper:

   name="Some fancy product"


You can set the view helper argument -isMainEntityOfWebPage only in the main type view helper, not in a child type view helper.