diff --git a/metatag_page_variants/metatag_page_variants.info.yml b/metatag_page_variants/metatag_page_variants.info.yml
new file mode 100644
index 0000000..abea374
--- /dev/null
+++ b/metatag_page_variants/metatag_page_variants.info.yml
@@ -0,0 +1,8 @@
+name: Metatag Page Variants
+type: module
+description: Provides metatag support for Page Manager and Panels variants.
+core: 8.x
+package: SEO
+dependencies:
+  - page_manager
+  - metatag
diff --git a/metatag_page_variants/metatag_page_variants.module b/metatag_page_variants/metatag_page_variants.module
new file mode 100644
index 0000000..d01945c
--- /dev/null
+++ b/metatag_page_variants/metatag_page_variants.module
@@ -0,0 +1,98 @@
+<?php
+
+/**
+ * @file
+ * Contains metatag_page_variants.module..
+ */
+
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\page_manager\Entity\PageVariant;
+use Drupal\metatag\Entity\MetatagDefaults;
+
+/**
+ * Implements hook_help().
+ */
+function metatag_page_variants_help($route_name, RouteMatchInterface $route_match) {
+  switch ($route_name) {
+    // Main module help for the metatag_panels module.
+    case 'help.page.metatag_panels':
+      $output = '';
+      $output .= '<h3>' . t('About') . '</h3>';
+      $output .= '<p>' . t('Provides metatag support for page variants') . '</p>';
+      return $output;
+
+    default:
+  }
+}
+
+/**
+ * Implements hook_form_FORM_ID_alter().
+ */
+function metatag_page_variants_form_metatag_defaults_add_form_alter(&$form, FormStateInterface $form_state, $form_id) {
+  $variants_options['Page Variants'] = _metatag_page_variants_get_variants();
+  $form['id']['#options'] = array_merge($form['id']['#options'], $variants_options);
+}
+
+/**
+ * Implements hook_page_attachments().
+ */
+function metatag_page_variants_page_attachments(array &$attachments) {
+  // Fetch entity from request.
+  $entity = \Drupal::request()->attributes->get('_entity');
+  if ($entity) {
+
+    $key = $entity->getEntityType()->id() . '__' . $entity->id();
+    // Get default metatags
+    $metatag_defaults = metatag_get_default_tags();
+    // Load page variant metatags.
+    $metatag_variant = MetatagDefaults::load($key);
+    if ($metatag_variant) {
+      // Overwrite the metatag defaults with the tags of the page variant.
+      $metatag_defaults = array_merge($metatag_defaults, $metatag_variant->get('tags'));
+
+      // Set the metatag in the static metatag attachments parameter so the metatag
+      // module wouldn't overwrite them.
+      $metatag_attachments = &drupal_static('metatag_attachments');
+
+      $metatag_manager = \Drupal::service('metatag.manager');
+      $metatag_attachments = $metatag_manager->generateElements($metatag_defaults, $entity);
+
+      // If any Metatag items were found, append them.
+      if (!empty($metatag_attachments['#attached']['html_head'])) {
+        if (empty($attachments['#attached'])) {
+          $attachments['#attached'] = [];
+        }
+        if (empty($attachments['#attached']['html_head'])) {
+          $attachments['#attached']['html_head'] = [];
+        }
+        foreach ($metatag_attachments['#attached']['html_head'] as $item) {
+          $attachments['#attached']['html_head'][] = $item;
+        }
+      }
+    }
+  }
+}
+
+/**
+ * Returns all available page variants.
+ *
+ * @return string[]
+ *   A list of page variants keyed by label.
+ */
+function _metatag_page_variants_get_variants() {
+  /** @var \Drupal\page_manager\Entity\PageVariant[] $variants */
+  $variants = PageVariant::loadMultiple();
+  $variant_options = array();
+  // Load all metatag defaults so we can filter the variants which already have
+  // a metatag default configured.
+  $metatag_defaults = MetatagDefaults::loadMultiple();
+  foreach ($variants as $key => $variant) {
+    $id = $variant->getEntityType()->id() . '__' . $key;
+    if (!isset($metatag_defaults[$id])) {
+      $label = $variant->getPage()->label() . ' : ' . $variant->label();
+      $variant_options[$id] = $label;
+    }
+  }
+  return $variant_options;
+}
diff --git a/src/Form/MetatagDefaultsForm.php b/src/Form/MetatagDefaultsForm.php
index ccbe7f8..62f8fb7 100644
--- a/src/Form/MetatagDefaultsForm.php
+++ b/src/Form/MetatagDefaultsForm.php
@@ -130,7 +130,20 @@ class MetatagDefaultsForm extends EntityForm {
         // Get the bundle label.
         $bundle_manager = \Drupal::service('entity_type.bundle.info');
         $bundle_info = $bundle_manager->getBundleInfo($entity_type);
-        $entity_label .= ': ' . $bundle_info[$entity_bundle]['label'];
+        if ($entity_type === 'page_variant') {
+          // Check if page manager is enabled and try to load the page variant
+          // so the label of the variant can be used.
+          $moduleHandler = \Drupal::service('module_handler');
+          if ($moduleHandler->moduleExists('metatag_page_variants')) {
+            $page_variant = \Drupal\page_manager\Entity\PageVariant::load($entity_bundle);
+            if ($page_variant) {
+              $entity_label .= ': ' . $page_variant->label();
+            }
+          }
+        }
+        else {
+          $entity_label .= ': ' . $bundle_info[$entity_bundle]['label'];
+        }
       }
 
       // Set the label to the config entity.
