The HTML <meta> element is used to provide meta information about your HTML document, typically keywords, document character set, caching pragmas, etc. Meta tags may be either of the http-equiv or name types, must contain a content attribute, and can also have either of the lang or scheme modifier attributes.

The HeadMeta helper supports the following methods for setting and adding meta tags:

  • appendName($keyValue, $content, $conditionalName)
  • offsetSetName($index, $keyValue, $content, $conditionalName)
  • prependName($keyValue, $content, $conditionalName)
  • setName($keyValue, $content, $modifiers)
  • appendHttpEquiv($keyValue, $content, $conditionalHttpEquiv)
  • offsetSetHttpEquiv($index, $keyValue, $content, $conditionalHttpEquiv)
  • prependHttpEquiv($keyValue, $content, $conditionalHttpEquiv)
  • setHttpEquiv($keyValue, $content, $modifiers)
  • setCharset($charset)

The following methods are also supported with XHTML1_RDFA doctype set with the Doctype helper.

  • appendProperty($property, $content, $modifiers)
  • offsetSetProperty($index, $property, $content, $modifiers)
  • prependProperty($property, $content, $modifiers)
  • setProperty($property, $content, $modifiers)

Finally, starting in 2.11.2, you can call the following method to determine whether or not to autoescape values used in meta tags:

  • setAutoEscape(bool $autoEscape = true) (enabled by default)


Disable this flag at your own risk. The one documented case where it is necessary to disable the flag is when setting the X-UA-Compatible http-equiv value to switch behavior for Internet Explorer, as escaped values will not trigger correct representation.

The $keyValue item is used to define a value for the name or http-equiv key; $content is the value for the 'content' key, and $modifiers is an optional associative array that can contain keys for lang and/or scheme.

You may also set meta tags using the headMeta() helper method, which has the following signature: headMeta($content, $keyValue, $keyType = 'name', $modifiers = [], $placement = 'APPEND'). $keyValue is the content for the key specified in $keyType, which should be either name or http-equiv. $keyType may also be specified as property if the doctype has been set to XHTML1_RDFA. $placement can be SET (overwrites all previously stored values), APPEND (added to end of stack), or PREPEND (added to top of stack).

HeadMeta overrides each of append(), offsetSet(), prepend(), and set() to enforce usage of the special methods as listed above. Internally, it stores each item as a stdClass token, which it later serializes using the itemToString() method. This allows you to perform checks on the items in the stack, and optionally modify these items by simply modifying the object returned.

The HeadMeta helper is a concrete implementation of the Placeholder helper.

Basic Usage

You may specify a new meta tag at any time. Typically, you will specify client-side caching rules or SEO keywords.

For instance, if you wish to specify SEO keywords, you'd be creating a meta name tag with the name keywords and the content the keywords you wish to associate with your page:

// setting meta keywords
$this->headMeta()->appendName('keywords', 'framework, PHP, productivity');

If you wished to set some client-side caching rules, you'd set http-equiv tags with the rules you wish to enforce:

// disabling client-side cache
    ->appendHttpEquiv('expires', 'Wed, 26 Feb 1997 08:21:57 GMT')
    ->appendHttpEquiv('pragma', 'no-cache')
    ->appendHttpEquiv('Cache-Control', 'no-cache');

Another popular use for meta tags is setting the content type, character set, and language:

// setting content type and character set
    ->appendHttpEquiv('Content-Type', 'text/html; charset=UTF-8')
    ->appendHttpEquiv('Content-Language', 'en-US');

If you are serving an HTML5 document, you should provide the character set like this:

// setting character set in HTML5
$this->headMeta()->setCharset('UTF-8'); // Will look like <meta charset="UTF-8">

As a final example, an easy way to display a transitional message before a redirect is using a "meta refresh":

// setting a meta refresh for 3 seconds to a new url:
    ->appendHttpEquiv('Refresh', '3;URL=');

When you're ready to place your meta tags in the layout, echo the helper:

<?= $this->headMeta() ?>

Usage with XHTML1_RDFA doctype

Enabling the RDFa doctype with the Doctype helper enables the use of the property attribute (in addition to the standard name and http-equiv) with HeadMeta. This is commonly used with the Facebook Open Graph Protocol.

For instance, you may specify an open graph page title and type as follows:

$this->headMeta()->setProperty('og:title', 'my article title');
$this->headMeta()->setProperty('og:type', 'article');
echo $this->headMeta();

// output is:
//   <meta property="og:title" content="my article title" />
//   <meta property="og:type" content="article" />

Usage with HTML5 doctype

Enabling the HTML5 doctype with the Doctype helper enables the use of the itemprop attribute (in addition to the standard name and http-equiv) with HeadMeta. This is typically used to add Microdata to the head of your document.

$this->headMeta()->setItemprop('headline', 'My Article Headline');
$this->headMeta()->setItemprop('dateCreated', $date->format('c'));
echo $this->headMeta();

// output is:
//   <meta itemprop="headline" content="My Article Headline">
//   <meta itemprop="dateCreated" content="2018-07-12T22:19:06+00:00">

Found a mistake or want to contribute to the documentation? Edit this page on GitHub!