Accessible Titles In React
Tags: a11y, react, webdev
Published: 2021-04-11 14:06:02

Page titles that are clear and concise help users with disabilities understand the web page's content and overall purpose. Titles identify the current location without requiring users to read or interpret page content. Without titles, users with disabilities can either lose track of the page they are currently on, or not understand the purpose of the page. 

## What Makes An Accessible Title  

An accessible title gives enough information that clearly and quickly defines the page's purpose and content. Adding a single word to describe the page as a title does not meet the needs of a person with disabilities.
 
An example of a title that is commonly seen is 'Shop'. 'Shop' simply doesn't give enough overall detail to the purpose of the page. Let's look at a couple ways we could make the title more accessible: 

  * <b>Bad:</b> Shop
  * <b>Better:</b> Mark's Store - Shop
  * <b>Best/Accessible:</b> Mark's Store - Shop - Socks

The most accessible title gives details like the site name, the pages purpose, which is to shop, and then the specific item they are shopping for. 


## Why It's A Problem In React

In React, page titles are a forgotten piece of application development. There are a few factors that play into this. The first being the misconception that changing page titles can be very difficult. The second, believe it or not, is due to the nature of React being a single page application, there are some developers that believe you cannot even change the page title at all!

Both of these are simply not true. React has a multitude of different ways to implement effective and accessible page titles between routes in your application! 

## Document Title Package

The react-document-title package allows you to easily add a page title to your React page components using a custom HTML tag called 'DocumentTitle' that wraps your page component. Once added, simply use the title attribute on the tag and you can set your pages title. 

### Example Usage  

``` jsx
 render() {
    return (
      <DocumentTitle title="Mark's Store - Shop - Socks" >
        <div>
          <h1> Shop Socks </h1>
        </div>
      </DocumentTitle>
    );
  }
```
### Resources

   * https://github.com/gaearon/react-document-title

## React Helmet

The react-helmet package will manage all of your changes to the document head. The good news with this package, is it allows you to use basic HTML <head> tags to set all the content. Within this, you can use this to set your title of your page as well!

### Example Usage  
``` jsx
  render () {
    return (
        <div className="main">
            <Helmet>
                <meta charSet="utf-8" />
                <title>Mark's Store - Shop - Socks</title>
            </Helmet>
            ...
        </div>
    );
  }
```

### Resources

   * https://github.com/nfl/react-helmet

## Component Lifecycle

Using Reacts component lifecycle, you can set the document title after the component has rendered using <b>document.title.</b>. This is a great technique for teams that do not want to use a third party library in order to create accessible titles.

### Example Usage  
``` jsx
class PageTitle extends Component {
  render() {
    return (
        <div>
           <h1> Shop Socks </h1>
        </div>
    );
  }

  componentDidMount() {
    document.title = "Mark's Store - Shop - Socks";
  }
}
```

## In Summary

Writing accessible titles in React isn't as hard as it has been made out to be. Using any of the above techniques to add titles to your page components, while also ensuring your titles are clear, concise, and describe the pages overall purpose, will make your application more accessible for all!