Skip to main content

Add Schema.org JSON-LD to your website

Installing

wagtail-schema.org supports Wagtail 2.0 upwards.

Install using pip:

$ pip install wagtail-schema.org

Add it to your INSTALLED_APPS to use the Django template tags:

INSTALLED_APPS = [
    ...
    'wagtailschemaorg',
    'wagtail.contrib.settings',
]

Using

wagtail-schema.org supports two types of schema entities: site-wide entities and page-specific entities. Site-wide entities might be the organisation that the site as a whole is about, while page-specific entities might be a single person that the page in question is about. Both sets of entities are optional, and sites can implement only those that make sense.

Site-wide entities

A site-wide entity is printed on every page using the {% ld_for_site %} template tag. They should be entities that are relevant to the whole site, such as the Organisation or Person that the site is about. Multiple (or zero) site-wide entities can exist for a site.

from django.db import models
from wagtail.contrib.settings.models import register_setting

from wagtailschemaorg.models import BaseLDSetting
from wagtailschemaorg.registry import register_site_thing
from wagtailschemaorg.utils import extend


@register_setting
@register_site_thing
class TestOrganisation(BaseLDSetting):
    """Details about this organisation"""
    name = models.CharField(max_length=100)
    phone_number = models.CharField(max_length=20)
    email = models.EmailField()
    twitter_handle = models.CharField(max_length=15)
    facebook_url = models.URLField()

    def ld_entity(self):
        return extend(super().ld_entity(), {
            '@type': 'Organization',
            'name': self.name,
            'email': self.email,
            'telephone': self.phone_number,
            'sameAs': [
                self.twitter_url,
                self.facebook_url,
            ],
        })

    @property
    def twitter_url(self):
        return 'https://twitter.com/' + self.twitter_handle

Page-specific entities

Each page can specify a list of relevant entities. Use {% ld_for_object page %} to print these.

# this code example assumes that the Wagtail version is 3.0 or higher
from django.db import models
from wagtail.admin import FieldPanel
from wagtail.models import Page

from testapp.models import TestOrganisation
from wagtailschemaorg.models import PageLDMixin
from wagtailschemaorg.utils import extend, image_ld


class PersonPage(PageLDMixin, Page):
    bio = models.TextField()
    date_of_birth = models.DateField()
    photo = models.ForeignKey('wagtailimages.Image', on_delete=models.PROTECT)

    content_panels = Page.content_panels + [
        FieldPanel('bio'),
        FieldPanel('date_of_birth'),
        FieldPanel('photo'),
    ]

    def ld_entity(self):
        site = self.get_site()
        return extend(super().ld_entity(), {
            '@type': 'Person',
            'birthDate': self.date_of_birth.isoformat(),
            'image': image_ld(self.photo, base_url=site.root_url),
            'organisation': TestOrganisation.for_site(site),
        })

In templates

wagtail-schema.org provides two template tags: one for printing out the site-wide entities and one for page-specific entities.

Django templates

Make sure that wagtailschemaorg is in your INSTALLED_APPS, and add {% load wagtailschemaorg_tags %} to the top of your template.

{% ld_for_site [site] %}

Print all the site-wide entities for a site. Takes an optional site argument, which defaults to the site from the current template request context. See register_site_thing for more information on site-wide entities.

{% ld_for_object [obj] %}

Print all the entities for obj. obj is optional, and defaults to page in the current template context. obj should implement the ThingLD interface. Calls obj.ld_to_data_list, and prints all the entities returned.

{% ld_print_entity entity %}

Print an entity directly. entity should be a dict with JSON-LD data.

Jinja2 templates

Add wagtailschemaorg.jinja2tags.WagtailSchemaOrgExtension to your Jinja2 extensions.

{% ld.for_site([site]) %}

Print all the site-wide entities for a site. Takes an optional site argument, which defaults to the site from the current template request context. See register_site_thing for more information on site-wide entities.

{% ld.for_object([obj]) %}

Print all the entities for obj. obj is optional, and defaults to page in the current template context. obj should implement the ThingLD interface. Calls obj.ld_to_data_list, and prints all the entities returned.

{% ld.print_entity(entity) %}

Print an entity directly. entity should be a dict with JSON-LD data.

Release files for wagtail-schema.org 4.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for wagtail-schema.org 4.1.0
File Size Uploaded
wagtail-schema.org-4.1.0.tar.gz 12.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for wagtail-schema.org 4.1.0
File Interpreter ABI Platform
wagtail_schema.org-4.1.0-py2.py3-none-any.whl Python 3, Python 2 none any Details

Total release size: 27.8 kB

Release files / wagtail-schema.org-4.1.0.tar.gz

Download URL wagtail-schema.org-4.1.0.tar.gz
Size 12.2 kB
Tags Source
SHA-256 checksum
How to use checksums
fa178101acb30e53cde320aae6895c8b0db55c6c20ab99d651a5d22b75275384
BLAKE2b-256 checksum
How to use checksums
a4eb1c8c18452085d37e0cf106b437d7616f9c51bc26117a1d0825f0b8c38a22
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.7

Release files / wagtail_schema.org-4.1.0-py2.py3-none-any.whl

Download URL wagtail_schema.org-4.1.0-py2.py3-none-any.whl
Size 15.5 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
5782cb8fbb28ac3c959cb91b9c915a88c9c9947eaf4c1d0c4af0484e52500e81
BLAKE2b-256 checksum
How to use checksums
40ae2e9ff96fd3a8dd90501167e423894800ef311d12cac530dcd41758176efe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.7

Release history Release notifications | RSS feed

5.0.0

2 release files

4.1.1

2 release files

This release

4.1.0 This release

2 release files

4.0.0

2 release files

3.0.0

2 release files

2.1.0

2 release files

2.0.0

2 release files

0.3.0

2 release files

0.2.0

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page