# index.html.md # Welcome to Wagtail’s documentation Wagtail is an open source CMS written in [Python](https://www.python.org/) and built on the [Django web framework](https://www.djangoproject.com/). Below are some useful links to help you get started with Wagtail. If you’d like to get a quick feel for Wagtail, try spinning up a [temporary developer environment](https://gitpod.io/#https://github.com/wagtail/wagtail-gitpod) in your browser (running on Gitpod - here’s [how it works](https://wagtail.org/blog/gitpod/)). * **First steps** * [Getting started](getting_started/index.html.md) * [Your first Wagtail site](getting_started/tutorial.html.md) * [Demo site](getting_started/demo_site.html.md) * [Tutorial](tutorial/index.html.md) * **Using Wagtail** * [Page models](topics/pages.html.md) * [Writing templates](topics/writing_templates.html.md) * [How to use images in templates](topics/images.html.md) * [Search](topics/search/index.html.md) * [Snippets](topics/snippets/index.html.md) * [Third-party tutorials](advanced_topics/third_party_tutorials.html.md) * **For editors** * [Editors guide (separate site)](https://guide.wagtail.org/) ## Index * [Getting started](getting_started/index.html.md) * [Your first Wagtail site](getting_started/tutorial.html.md) * [Quick install](getting_started/quick_install.html.md) * [Demo site](getting_started/demo_site.html.md) * [Integrating Wagtail into a Django project](getting_started/integrating_into_django.html.md) * [The Zen of Wagtail](getting_started/the_zen_of_wagtail.html.md) * [Tutorial](tutorial/index.html.md) * [Customize your home page](tutorial/customize_homepage.html.md) * [Create a footer for all pages](tutorial/create_footer_for_all_pages.html.md) * [Create editable footer text with Wagtail Snippets](tutorial/create_footer_for_all_pages.html.md#create-editable-footer-text-with-wagtail-snippets) * [Set up site menu for linking to the homepage and other pages](tutorial/set_up_site_menu.html.md) * [Style and improve user experience](tutorial/style_your_site.html.md) * [Create contact page](tutorial/create_contact_page.html.md) * [Create a portfolio page](tutorial/create_portfolio_page.html.md) * [Add search to your site](tutorial/add_search.html.md) * [Deploy your site](tutorial/deployment.html.md) * [Usage guide](topics/index.html.md) * [Page models](topics/pages.html.md) * [Writing templates](topics/writing_templates.html.md) * [How to use images in templates](topics/images.html.md) * [Search](topics/search/index.html.md) * [Snippets](topics/snippets/index.html.md) * [How to use StreamField for mixed content](topics/streamfield.html.md) * [Permissions](topics/permissions.html.md) * [Advanced](advanced_topics/index.html.md) * [Images](advanced_topics/images/index.html.md) * [Documents](advanced_topics/documents/index.html.md) * [Icons](advanced_topics/icons.html.md) * [Embedded content](advanced_topics/embeds.html.md) * [Tagging](advanced_topics/tags.html.md) * [How to add Wagtail into an existing Django project](advanced_topics/add_to_django_project.html.md) * [Performance](advanced_topics/performance.html.md) * [Internationalization](advanced_topics/i18n.html.md) * [Private pages](advanced_topics/privacy.html.md) * [Customizing Wagtail](advanced_topics/customization/index.html.md) * [Third-party tutorials](advanced_topics/third_party_tutorials.html.md) * [Testing your Wagtail site](advanced_topics/testing.html.md) * [Wagtail API](advanced_topics/api/index.html.md) * [How to build a site with AMP support](advanced_topics/amp.html.md) * [Accessibility considerations](advanced_topics/accessibility_considerations.html.md) * [Sustainability considerations](advanced_topics/sustainability_considerations.html.md) * [About StreamField BoundBlocks and values](advanced_topics/boundblocks_and_values.html.md) * [Multi-site, multi-instance and multi-tenancy](advanced_topics/multi_site_multi_instance_multi_tenancy.html.md) * [How to use a redirect with Form builder to prevent double submission](advanced_topics/formbuilder_routablepage_redirect.html.md) * [StreamField migrations](advanced_topics/streamfield_migrations.html.md) * [StreamField validation](advanced_topics/streamfield_validation.html.md) * [Manage the reference index](advanced_topics/reference_index.html.md) * [Headless support](advanced_topics/headless.html.md) * [Content personalization](advanced_topics/content_personalization.html.md) * [Extending](extending/index.html.md) * [Creating admin views](extending/admin_views.html.md) * [Generic views](extending/generic_views.html.md) * [Template components](extending/template_components.html.md) * [Using forms in admin views](extending/forms.html.md) * [Adding reports](extending/adding_reports.html.md) * [Adding new Task types](extending/custom_tasks.html.md) * [Audit log](extending/audit_log.html.md) * [Customizing the user account settings form](extending/custom_account_settings.html.md) * [Customizing group edit/create views](extending/customizing_group_views.html.md) * [Custom image filters](extending/custom_image_filters.html.md) * [Extending client-side behavior](extending/extending_client_side.html.md) * [Accessing the editor programmatically](extending/editor_api.html.md) * [Accessing panels from client-side code](extending/client_side_panels.html.md) * [Rich text internals](extending/rich_text_internals.html.md) * [Extending the Draftail editor](extending/extending_draftail.html.md) * [Adding custom bulk actions](extending/custom_bulk_actions.html.md) * [Adapting reusable apps to support custom base page models](extending/reusable_app_base_page.html.md) * [Reference](reference/index.html.md) * [Pages](reference/pages/index.html.md) * [StreamField reference](reference/streamfield/index.html.md) * [Contrib modules](reference/contrib/index.html.md) * [Admin UI reference](reference/ui/index.html.md) * [Management commands](reference/management_commands.html.md) * [Model reference](reference/models.html.md) * [Hooks](reference/hooks.html.md) * [Signals](reference/signals.html.md) * [Settings](reference/settings.html.md) * [The project template](reference/project_template.html.md) * [Permissions](reference/permissions.html.md) * [Jinja2 template support](reference/jinja2.html.md) * [Panels](reference/panels.html.md) * [Viewsets](reference/viewsets.html.md) * [Deployment & hosting](deployment/index.html.md) * [Packages](packages/index.html.md) * [Support](support.html.md) * [Editor’s guide](editor_manual/index.html.md) * [Contributing](contributing/index.html.md) * [Your first contribution](contributing/first_contribution_guide.html.md) * [Setting up a development environment](contributing/developing.html.md) * [API development](contributing/api_development.html.md) * [General coding guidelines](contributing/general_guidelines.html.md) * [Python coding guidelines](contributing/python_guidelines.html.md) * [UI coding guidelines](contributing/ui_guidelines.html.md) * [Documentation guidelines](contributing/documentation_guidelines.html.md) * [Writing documentation](contributing/documentation_modes.html.md) * [Translations](contributing/translations.html.md) * [Reporting security issues](contributing/security.html.md) * [Issue tracking](contributing/issue_tracking.html.md) * [Committing code](contributing/committing.html.md) * [Release notes](releases/index.html.md) * [Upgrading Wagtail](releases/upgrading.html.md) * [Wagtail’s release process](releases/release_process.html.md) * [Wagtail 8.1 release notes - IN DEVELOPMENT](releases/8.1.html.md) * [Wagtail 8.0.1 release notes - IN DEVELOPMENT](releases/8.0.1.html.md) * [Wagtail 8.0 release notes](releases/8.0.html.md) * [Wagtail 7.4.4 release notes - IN DEVELOPMENT](releases/7.4.4.html.md) * [Wagtail 7.4.3 release notes](releases/7.4.3.html.md) * [Wagtail 7.4.2 release notes](releases/7.4.2.html.md) * [Wagtail 7.4.1 release notes](releases/7.4.1.html.md) * [Wagtail 7.4 (LTS) release notes](releases/7.4.html.md) * [Wagtail 7.3.4 release notes](releases/7.3.4.html.md) * [Wagtail 7.3.3 release notes](releases/7.3.3.html.md) * [Wagtail 7.3.2 release notes](releases/7.3.2.html.md) * [Wagtail 7.3.1 release notes](releases/7.3.1.html.md) * [Wagtail 7.3 release notes](releases/7.3.html.md) * [Wagtail 7.2.3 release notes](releases/7.2.3.html.md) * [Wagtail 7.2.2 release notes](releases/7.2.2.html.md) * [Wagtail 7.2.1 release notes](releases/7.2.1.html.md) * [Wagtail 7.2 release notes](releases/7.2.html.md) * [Wagtail 7.1.3 release notes](releases/7.1.3.html.md) * [Wagtail 7.1.2 release notes](releases/7.1.2.html.md) * [Wagtail 7.1.1 release notes](releases/7.1.1.html.md) * [Wagtail 7.1 release notes](releases/7.1.html.md) * [Wagtail 7.0.10 release notes - IN DEVELOPMENT](releases/7.0.10.html.md) * [Wagtail 7.0.9 release notes](releases/7.0.9.html.md) * [Wagtail 7.0.8 release notes](releases/7.0.8.html.md) * [Wagtail 7.0.7 release notes](releases/7.0.7.html.md) * [Wagtail 7.0.6 release notes](releases/7.0.6.html.md) * [Wagtail 7.0.5 release notes](releases/7.0.5.html.md) * [Wagtail 7.0.4 release notes](releases/7.0.4.html.md) * [Wagtail 7.0.3 release notes](releases/7.0.3.html.md) * [Wagtail 7.0.2 release notes](releases/7.0.2.html.md) * [Wagtail 7.0.1 release notes](releases/7.0.1.html.md) * [Wagtail 7.0 (LTS) release notes](releases/7.0.html.md) * [Wagtail 6.4.2 release notes](releases/6.4.2.html.md) * [Wagtail 6.4.1 release notes](releases/6.4.1.html.md) * [Wagtail 6.4 release notes](releases/6.4.html.md) * [Wagtail 6.3.9 release notes - IN DEVELOPMENT](releases/6.3.9.html.md) * [Wagtail 6.3.8 release notes](releases/6.3.8.html.md) * [Wagtail 6.3.7 release notes](releases/6.3.7.html.md) * [Wagtail 6.3.6 release notes](releases/6.3.6.html.md) * [Wagtail 6.3.5 release notes](releases/6.3.5.html.md) * [Wagtail 6.3.4 release notes](releases/6.3.4.html.md) * [Wagtail 6.3.3 release notes](releases/6.3.3.html.md) * [Wagtail 6.3.2 release notes](releases/6.3.2.html.md) * [Wagtail 6.3.1 release notes](releases/6.3.1.html.md) * [Wagtail 6.3 (LTS) release notes](releases/6.3.html.md) * [Wagtail 6.2.4 release notes](releases/6.2.4.html.md) * [Wagtail 6.2.3 release notes](releases/6.2.3.html.md) * [Wagtail 6.2.2 release notes](releases/6.2.2.html.md) * [Wagtail 6.2.1 release notes](releases/6.2.1.html.md) * [Wagtail 6.2 release notes](releases/6.2.html.md) * [Wagtail 6.1.3 release notes](releases/6.1.3.html.md) * [Wagtail 6.1.2 release notes](releases/6.1.2.html.md) * [Wagtail 6.1.1 release notes](releases/6.1.1.html.md) * [Wagtail 6.1 release notes](releases/6.1.html.md) * [Wagtail 6.0.6 release notes](releases/6.0.6.html.md) * [Wagtail 6.0.5 release notes](releases/6.0.5.html.md) * [Wagtail 6.0.4 release notes](releases/6.0.4.html.md) * [Wagtail 6.0.3 release notes](releases/6.0.3.html.md) * [Wagtail 6.0.2 release notes](releases/6.0.2.html.md) * [Wagtail 6.0.1 release notes](releases/6.0.1.html.md) * [Wagtail 6.0 release notes](releases/6.0.html.md) * [Wagtail 5.2.8 release notes](releases/5.2.8.html.md) * [Wagtail 5.2.7 release notes](releases/5.2.7.html.md) * [Wagtail 5.2.6 release notes](releases/5.2.6.html.md) * [Wagtail 5.2.5 release notes](releases/5.2.5.html.md) * [Wagtail 5.2.4 release notes](releases/5.2.4.html.md) * [Wagtail 5.2.3 release notes](releases/5.2.3.html.md) * [Wagtail 5.2.2 release notes](releases/5.2.2.html.md) * [Wagtail 5.2.1 release notes](releases/5.2.1.html.md) * [Wagtail 5.2 (LTS) release notes](releases/5.2.html.md) * [Wagtail 5.1.3 release notes](releases/5.1.3.html.md) * [Wagtail 5.1.2 release notes](releases/5.1.2.html.md) * [Wagtail 5.1.1 release notes](releases/5.1.1.html.md) * [Wagtail 5.1 release notes](releases/5.1.html.md) * [Wagtail 5.0.5 release notes](releases/5.0.5.html.md) * [Wagtail 5.0.4 release notes](releases/5.0.4.html.md) * [Wagtail 5.0.3 release notes](releases/5.0.3.html.md) * [Wagtail 5.0.2 release notes](releases/5.0.2.html.md) * [Wagtail 5.0.1 release notes](releases/5.0.1.html.md) * [Wagtail 5.0 release notes](releases/5.0.html.md) * [Wagtail 4.2.4 release notes](releases/4.2.4.html.md) * [Wagtail 4.2.3 release notes](releases/4.2.3.html.md) * [Wagtail 4.2.2 release notes](releases/4.2.2.html.md) * [Wagtail 4.2.1 release notes](releases/4.2.1.html.md) * [Wagtail 4.2 release notes](releases/4.2.html.md) * [Wagtail 4.1.9 release notes](releases/4.1.9.html.md) * [Wagtail 4.1.8 release notes](releases/4.1.8.html.md) * [Wagtail 4.1.7 release notes](releases/4.1.7.html.md) * [Wagtail 4.1.6 release notes](releases/4.1.6.html.md) * [Wagtail 4.1.5 release notes](releases/4.1.5.html.md) * [Wagtail 4.1.4 release notes](releases/4.1.4.html.md) * [Wagtail 4.1.3 release notes](releases/4.1.3.html.md) * [Wagtail 4.1.2 release notes](releases/4.1.2.html.md) * [Wagtail 4.1.1 release notes](releases/4.1.1.html.md) * [Wagtail 4.1 (LTS) release notes](releases/4.1.html.md) * [Wagtail 4.0.4 release notes](releases/4.0.4.html.md) * [Wagtail 4.0.2 release notes](releases/4.0.2.html.md) * [Wagtail 4.0.1 release notes](releases/4.0.1.html.md) * [Wagtail 4.0 release notes](releases/4.0.html.md) * [Wagtail 3.0.3 release notes](releases/3.0.3.html.md) * [Wagtail 3.0.2 release notes](releases/3.0.2.html.md) * [Wagtail 3.0.1 release notes](releases/3.0.1.html.md) * [Wagtail 3.0 release notes](releases/3.0.html.md) * [Wagtail 2.16.3 release notes](releases/2.16.3.html.md) * [Wagtail 2.16.2 release notes](releases/2.16.2.html.md) * [Wagtail 2.16.1 release notes](releases/2.16.1.html.md) * [Wagtail 2.16 release notes](releases/2.16.html.md) * [Wagtail 2.15.6 release notes](releases/2.15.6.html.md) * [Wagtail 2.15.5 release notes](releases/2.15.5.html.md) * [Wagtail 2.15.4 release notes](releases/2.15.4.html.md) * [Wagtail 2.15.3 release notes](releases/2.15.3.html.md) * [Wagtail 2.15.2 release notes](releases/2.15.2.html.md) * [Wagtail 2.15.1 release notes](releases/2.15.1.html.md) * [Wagtail 2.15 (LTS) release notes](releases/2.15.html.md) * [Wagtail 2.14.2 release notes](releases/2.14.2.html.md) * [Wagtail 2.14.1 release notes](releases/2.14.1.html.md) * [Wagtail 2.14 release notes](releases/2.14.html.md) * [Wagtail 2.13.5 release notes](releases/2.13.5.html.md) * [Wagtail 2.13.4 release notes](releases/2.13.4.html.md) * [Wagtail 2.13.3 release notes](releases/2.13.3.html.md) * [Wagtail 2.13.2 release notes](releases/2.13.2.html.md) * [Wagtail 2.13.1 release notes](releases/2.13.1.html.md) * [Wagtail 2.13 release notes](releases/2.13.html.md) * [Wagtail 2.12.6 release notes](releases/2.12.6.html.md) * [Wagtail 2.12.5 release notes](releases/2.12.5.html.md) * [Wagtail 2.12.4 release notes](releases/2.12.4.html.md) * [Wagtail 2.12.3 release notes](releases/2.12.3.html.md) * [Wagtail 2.12.2 release notes](releases/2.12.2.html.md) * [Wagtail 2.12.1 release notes](releases/2.12.1.html.md) * [Wagtail 2.12 release notes](releases/2.12.html.md) * [Wagtail 2.11.9 release notes](releases/2.11.9.html.md) * [Wagtail 2.11.8 release notes](releases/2.11.8.html.md) * [Wagtail 2.11.7 release notes](releases/2.11.7.html.md) * [Wagtail 2.11.6 release notes](releases/2.11.6.html.md) * [Wagtail 2.11.5 release notes](releases/2.11.5.html.md) * [Wagtail 2.11.4 release notes](releases/2.11.4.html.md) * [Wagtail 2.11.3 release notes](releases/2.11.3.html.md) * [Wagtail 2.11.2 release notes](releases/2.11.2.html.md) * [Wagtail 2.11.1 release notes](releases/2.11.1.html.md) * [Wagtail 2.11 (LTS) release notes](releases/2.11.html.md) * [Wagtail 2.10.2 release notes](releases/2.10.2.html.md) * [Wagtail 2.10.1 release notes](releases/2.10.1.html.md) * [Wagtail 2.10 release notes](releases/2.10.html.md) * [Wagtail 2.9.3 release notes](releases/2.9.3.html.md) * [Wagtail 2.9.2 release notes](releases/2.9.2.html.md) * [Wagtail 2.9.1 release notes](releases/2.9.1.html.md) * [Wagtail 2.9 release notes](releases/2.9.html.md) * [Wagtail 2.8.2 release notes](releases/2.8.2.html.md) * [Wagtail 2.8.1 release notes](releases/2.8.1.html.md) * [Wagtail 2.8 release notes](releases/2.8.html.md) * [Wagtail 2.7.4 release notes](releases/2.7.4.html.md) * [Wagtail 2.7.3 release notes](releases/2.7.3.html.md) * [Wagtail 2.7.2 release notes](releases/2.7.2.html.md) * [Wagtail 2.7.1 release notes](releases/2.7.1.html.md) * [Wagtail 2.7 (LTS) release notes](releases/2.7.html.md) * [Wagtail 2.6.3 release notes](releases/2.6.3.html.md) * [Wagtail 2.6.2 release notes](releases/2.6.2.html.md) * [Wagtail 2.6.1 release notes](releases/2.6.1.html.md) * [Wagtail 2.6 release notes](releases/2.6.html.md) * [Wagtail 2.5.2 release notes](releases/2.5.2.html.md) * [Wagtail 2.5.1 release notes](releases/2.5.1.html.md) * [Wagtail 2.5 release notes](releases/2.5.html.md) * [Wagtail 2.4 release notes](releases/2.4.html.md) * [Wagtail 2.3 (LTS) release notes](releases/2.3.html.md) * [Wagtail 2.2.2 release notes](releases/2.2.2.html.md) * [Wagtail 2.2.1 release notes](releases/2.2.1.html.md) * [Wagtail 2.2 release notes](releases/2.2.html.md) * [Wagtail 2.1.3 release notes](releases/2.1.3.html.md) * [Wagtail 2.1.2 release notes](releases/2.1.2.html.md) * [Wagtail 2.1.1 release notes](releases/2.1.1.html.md) * [Wagtail 2.1 release notes](releases/2.1.html.md) * [Wagtail 2.0.2 release notes](releases/2.0.2.html.md) * [Wagtail 2.0.1 release notes](releases/2.0.1.html.md) * [Wagtail 2.0 release notes](releases/2.0.html.md) * [Wagtail 1.13.4 release notes](releases/1.13.4.html.md) * [Wagtail 1.13.3 release notes](releases/1.13.3.html.md) * [Wagtail 1.13.2 release notes](releases/1.13.2.html.md) * [Wagtail 1.13.1 release notes](releases/1.13.1.html.md) * [Wagtail 1.13 (LTS) release notes](releases/1.13.html.md) * [Wagtail 1.12.6 release notes](releases/1.12.6.html.md) * [Wagtail 1.12.5 release notes](releases/1.12.5.html.md) * [Wagtail 1.12.4 release notes](releases/1.12.4.html.md) * [Wagtail 1.12.3 release notes](releases/1.12.3.html.md) * [Wagtail 1.12.2 release notes](releases/1.12.2.html.md) * [Wagtail 1.12.1 release notes](releases/1.12.1.html.md) * [Wagtail 1.12 (LTS) release notes](releases/1.12.html.md) * [Wagtail 1.11.1 release notes](releases/1.11.1.html.md) * [Wagtail 1.11 release notes](releases/1.11.html.md) * [Wagtail 1.10.1 release notes](releases/1.10.1.html.md) * [Wagtail 1.10 release notes](releases/1.10.html.md) * [Wagtail 1.9.1 release notes](releases/1.9.1.html.md) * [Wagtail 1.9 release notes](releases/1.9.html.md) * [Wagtail 1.8.2 release notes](releases/1.8.2.html.md) * [Wagtail 1.8.1 release notes](releases/1.8.1.html.md) * [Wagtail 1.8 (LTS) release notes](releases/1.8.html.md) * [Wagtail 1.7 release notes](releases/1.7.html.md) * [Wagtail 1.6.3 release notes](releases/1.6.3.html.md) * [Wagtail 1.6.2 release notes](releases/1.6.2.html.md) * [Wagtail 1.6.1 release notes](releases/1.6.1.html.md) * [Wagtail 1.6 release notes](releases/1.6.html.md) * [Wagtail 1.5.3 release notes](releases/1.5.3.html.md) * [Wagtail 1.5.2 release notes](releases/1.5.2.html.md) * [Wagtail 1.5.1 release notes](releases/1.5.1.html.md) * [Wagtail 1.5 release notes](releases/1.5.html.md) * [Wagtail 1.4.6 release notes](releases/1.4.6.html.md) * [Wagtail 1.4.5 release notes](releases/1.4.5.html.md) * [Wagtail 1.4.4 release notes](releases/1.4.4.html.md) * [Wagtail 1.4.3 release notes](releases/1.4.3.html.md) * [Wagtail 1.4.2 release notes](releases/1.4.2.html.md) * [Wagtail 1.4.1 release notes](releases/1.4.1.html.md) * [Wagtail 1.4 (LTS) release notes](releases/1.4.html.md) * [Wagtail 1.3.1 release notes](releases/1.3.1.html.md) * [Wagtail 1.3 release notes](releases/1.3.html.md) * [Wagtail 1.2 release notes](releases/1.2.html.md) * [Wagtail 1.1 release notes](releases/1.1.html.md) * [Wagtail 1.0 release notes](releases/1.0.html.md) * [Wagtail 0.8.10 release notes](releases/0.8.10.html.md) * [Wagtail 0.8.8 release notes](releases/0.8.8.html.md) * [Wagtail 0.8.7 release notes](releases/0.8.7.html.md) * [Wagtail 0.8.6 release notes](releases/0.8.6.html.md) * [Wagtail 0.8.5 release notes](releases/0.8.5.html.md) * [Wagtail 0.8.4 release notes](releases/0.8.4.html.md) * [Wagtail 0.8.3 release notes](releases/0.8.3.html.md) * [Wagtail 0.8.1 release notes](releases/0.8.1.html.md) * [Wagtail 0.8 (LTS) release notes](releases/0.8.html.md) * [Wagtail 0.7 release notes](releases/0.7.html.md) * [Wagtail 0.6 release notes](releases/0.6.html.md) * [Wagtail 0.5 release notes](releases/0.5.html.md) * [Wagtail 0.4.1 release notes](releases/0.4.1.html.md) * [Wagtail 0.4 release notes](releases/0.4.html.md) # advanced_topics/accessibility_considerations.html.md # Accessibility considerations Accessibility for CMS-driven websites is a matter of [modeling content appropriately](advanced_topics/accessibility_considerations.html.md#content-modeling), [creating accessible templates](advanced_topics/accessibility_considerations.html.md#accessibility-in-templates), and [authoring accessible content](advanced_topics/accessibility_considerations.html.md#authoring-accessible-content) with readability and accessibility guidelines in mind. Wagtail generally puts developers in control of content modeling and front-end markup, but there are a few areas to be aware of nonetheless, and ways to help authors be aware of readability best practices. Note there is much more to building accessible websites than we cover here – see our list of [accessibility resources](advanced_topics/accessibility_considerations.html.md#accessibility-resources) for more information. > * [Content modeling](advanced_topics/accessibility_considerations.html.md#content-modeling) > * [Accessibility in templates](advanced_topics/accessibility_considerations.html.md#accessibility-in-templates) > * [Authoring accessible content](advanced_topics/accessibility_considerations.html.md#authoring-accessible-content) > * [Accessibility resources](advanced_topics/accessibility_considerations.html.md#id6) ## Content modeling As part of defining your site’s models, here are areas to pay special attention to: ### Alt text for images Wherever an image is used, the content editor should be able to mark the image as decorative or provide a context-specific text alternative. The image embed in our rich text editor supports this behavior. Wagtail 6.3 added [`ImageBlock`](reference/streamfield/blocks.html.md#streamfield-imageblock) to provide this behavior for images within StreamFields. Wagtail 6.3 also added an optional `description` field to the Wagtail image model and to custom image models inheriting from `wagtail.images.models.AbstractImage`. Text in that field will be offered as the default alt text when inserting images in rich text or using ImageBlock. If the description field is empty, the title field will be used instead. If you would like to customize this behavior, [override the `default_alt_text` property](advanced_topics/images/custom_image_model.html.md#custom-image-model) in your image model. #### NOTE Important considerations - Alt text should be written based on the context the image is displayed in. - When specifying alt text fields, make sure they are optional so editors can choose to not write any alt text for decorative images. An image might be decorative in some cases but not in others. For example, thumbnails in page listings can often be considered decorative. - If the alt text’s content is already part of the rest of the page, ideally the image should not repeat the same content. - Take the time to provide `help_text` with appropriate guidance. For example, linking to [established resources on alt text](https://axesslab.com/alt-texts/). ### Embeds title Missing embed titles are common failures in accessibility audits of Wagtail websites. In some cases, Wagtail embeds’ iframe doesn’t have a `title` attribute set. This is often a problem with OEmbed providers. This is very problematic for screen reader users, who rely on the title to understand what the embed is, and whether to interact with it or not. If your website relies on embeds that have missing titles, make sure to either: - Add the OEmbed *title* field as a `title` on the `iframe`. - Add a custom mandatory Title field to your embeds, and add it as the `iframe`’s `title`. ### Available heading levels Wagtail makes it very easy for developers to control which heading levels should be available for any given content, via [rich text features](advanced_topics/customization/page_editing_interface.html.md#rich-text-features) or custom StreamField blocks. In both cases, take the time to restrict what heading levels are available so the pages’ document outline is more likely to be logical and sequential. Consider using the following restrictions: - Disallow `h1` in rich text. There should only be one `h1` tag per page, which generally maps to the page’s `title`. - Limit heading levels to `h2` for the main content of a page. Add `h3` only if deemed necessary. Avoid other levels as a general rule. - For content that is displayed in a specific section of the page, limit heading levels to those directly below the section’s main heading. If managing headings via StreamField, make sure to apply the same restrictions there. ### Bold and italic formatting in rich text By default, Wagtail stores its bold formatting as a `b` tag, and italic as `i` ([#4665](https://github.com/wagtail/wagtail/issues/4665)). While those tags don’t necessarily always have correct semantics (`strong` and `em` are more ubiquitous), there isn’t much consequence for screen reader users, as by default screen readers do not announce content differently based on emphasis. If this is a concern to you, you can change which tags are used when saving content with [rich text format converters](extending/rich_text_internals.html.md#rich-text-format-converters). In the future, [rich text rewrite handlers](extending/rich_text_internals.html.md#rich-text-rewrite-handlers) should also support this being done without altering the storage format ([#4223](https://github.com/wagtail/wagtail/issues/4223)). ### TableBlock Screen readers will use row and column headers to announce the context of each table cell. Please encourage editors to set row headers and/or column headers as appropriate for their table. Always add a Caption, so screen reader users navigating the site’s tables get an overview of the table content before it is read. ## Accessibility in templates Here are common gotchas to be aware of to make the site’s templates as accessible as possible. ### Alt text in templates See the [content modeling](advanced_topics/accessibility_considerations.html.md#content-modeling) section above. Additionally, make sure to [customize images’ alt text](topics/images.html.md#image-tag-alt), either setting it to the relevant field, or to an empty string for decorative images, or images where the alt text would be a repeat of other content. Even when your images have alt text coming directly from the image model, you still need to decide whether there should be alt text for the particular context the image is used in. For example, avoid alt text in listings where the alt text just repeats the listing items’ title. ### Empty heading tags In both rich text and custom StreamField blocks, it’s easy for editors to create a heading block but not add any content to it. The [built-in content checker](advanced_topics/accessibility_considerations.html.md#built-in-content-checker) will highlight empty headings so editors can find and fix them. If you need stricter enforcement: - Add validation rules to those fields, making sure the page can’t be saved with the empty headings, for example by using the [StreamField](topics/streamfield.html.md) `CharBlock` which is required by default. - Consider adding similar validation rules for rich text fields. Alternately, you can hide empty heading blocks with CSS: ```css h1:empty, h2:empty, h3:empty, h4:empty, h5:empty, h6:empty { display: none; } ``` ### Forms The [Form builder](reference/contrib/forms/index.html.md#form-builder) uses Django’s forms API. Here are considerations specific to forms in templates: - Avoid rendering helpers such as `as_table`, `as_ul`, `as_p`, which can make forms harder to navigate for screen reader users or cause HTML validation issues. - Make sure to visually distinguish required and optional fields. - Take the time to group related fields together in `fieldset`, with an appropriate `legend`, in particular for radios and checkboxes. - If relevant, use the appropriate `autocomplete` and `autocapitalize` attributes. - For Date and Datetime fields, make sure to display the expected format or an example value (see Django ticket [#32340](https://code.djangoproject.com/ticket/32340)). Or use [input type=”date”](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date). - For Number fields, consider whether `input type="number"` really is appropriate, or whether there may be [better alternatives such as inputmode](https://technology.blog.gov.uk/2020/02/24/why-the-gov-uk-design-system-team-changed-the-input-type-for-numbers/). Make sure to test your forms’ implementation with assistive technologies, and review [official W3C guidance on accessible forms development](https://www.w3.org/WAI/tutorials/forms/) for further information. ## Authoring accessible content A number of built-in tools and additional resources are available to help create accessible content. ### Built-in content checker Wagtail includes an content checker built into the [user bar](topics/writing_templates.html.md#wagtailuserbar-tag) and editing views supporting previews. The checker can help authors create more accessible websites following best practices and accessibility standards like [WCAG](https://www.w3.org/WAI/standards-guidelines/wcag/). The checker is based on the [Axe](https://github.com/dequelabs/axe-core) testing engine and scans the loaded page for errors. By default, the checker includes the following rules to find common issues in authored content: - `button-name`: `