Simple AMP integration Drupal 8 module
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

Simple AMP (Accelerated Mobile Pages) integration Drupal 8 module

Module requires composer require lullabot/amp

The module is extendable, there are two components: AmpComponent and AmpMetadata.

Read blog post about this module: How to implement simple AMP support in Drupal 8

This module has been released on, see Simple AMP project page.

How to Use

  • Create new Display Mode for your entity that will support AMP. New View modes can be created via /admin/structure/display-modes/view.
  • Enable newly created View mode on entity Manage Display page. Example path: /admin/structure/types/manage/article/display
  • Open Simple AMP Entity Types page and enable entity type that supports AMP and choose Display Mode for it. /admin/config/services/simple-amp.
  • Open Components settings page and enable default components. /admin/config/services/simple-amp/components.
  • Hit Save configuration and you're all set.

URL alias

If you would like to have URL alias in the path /node-alias/amp instead of /node/[nid]/amp please install Sub-pathauto (Sub-path URL Aliases)


  • Modify template in simple_amp/templates/amp.html.twig to match your design
  • You may also have custom template per content type: amp--node.html.twig or amp--node--article.html.twig



All plugins stored in src/Plugin/AmpComponent/* currently the module doesn't support all available AMP components, but can be easily extended from your own module.

Here is example:

The key variables here are:

  • name - plugin name
  • description - plugin description.
  • regexp - array of regular expressions to match in HTML body.

namespace Drupal\simple_amp\Plugin\AmpComponent;

use Drupal\simple_amp\AmpComponentBase;

 * Youtube AMP component.
 * @AmpComponent(
 *   id = "amp-youtube",
 *   name = @Translation("YouTube"),
 *   description = @Translation("YouTube Component"),
 *   regexp = {
 *     "/<amp\-youtube.*><\/amp\-youtube>/isU",
 *   }
 * )
class Youtube extends AmpComponentBase {

   * {@inheritdoc}
  public function getElement() {
    return '<script async custom-element="amp-youtube" src=""></script>';



All plugins stored in src/Plugin/AmpMetadata/* provide Metadata for specific entity.

Here is example:

The key variables here are:

  • entity_types - array of entity type names. This will tell the module to generate AMP Metadata for entity types specified in this variable.

namespace Drupal\simple_amp\Plugin\AmpMetadata;

use Drupal\simple_amp\AmpMetadataBase;
use Drupal\simple_amp\Metadata\Metadata;
use Drupal\simple_amp\Metadata\Author;
use Drupal\simple_amp\Metadata\Publisher;
use Drupal\simple_amp\Metadata\Image;

 * Example AMP metadata component.
 * @AmpMetadata(
 *   id = "default",
 *   entity_types = {
 *     "example_article"
 *   }
 * )
class ExampleEntity extends AmpMetadataBase {

   * {@inheritdoc}
  public function getMetadata($entity) {
    $metadata = new Metadata();
    $author = (new Author())
      ->setName('Test Author');
    $logo = (new Image())
    $publisher = (new Publisher())
    $image = (new Image())
    return $metadata->build();


Module developed by Minnur Yunusov at Chapter Three