diff --git a/entity_embed.module b/entity_embed.module
index fbdd994..8ccefb6 100644
--- a/entity_embed.module
+++ b/entity_embed.module
@@ -6,6 +6,8 @@
  * format.
  */
 
+use Drupal\Component\Utility\UrlHelper;
+
 /**
  * Implements hook_theme().
  */
@@ -31,6 +33,11 @@ function template_preprocess_entity_embed_container(&$variables) {
   $variables['element'] += ['#attributes' => []];
   $variables['attributes'] = $variables['element']['#attributes'];
   $variables['children'] = $variables['element']['#children'];
+  if(isset($variables['element']['#context']['data-entity-embed-display-settings']['link_url'])) {
+    $variables['url'] = UrlHelper::filterBadProtocol($variables['element']['#context']['data-entity-embed-display-settings']['link_url']);
+  } else {
+    $variables['url'] = '';
+  }
 }
 
 /**
diff --git a/src/Form/EntityEmbedDialog.php b/src/Form/EntityEmbedDialog.php
index ae0194b..2d78833 100644
--- a/src/Form/EntityEmbedDialog.php
+++ b/src/Form/EntityEmbedDialog.php
@@ -160,6 +160,7 @@ class EntityEmbedDialog extends FormBase {
       'data-entity-embed-display' => 'entity_reference:entity_reference_entity_view',
       'data-entity-embed-display-settings' => isset($form_state->get('entity_element')['data-entity-embed-settings']) ? $form_state->get('entity_element')['data-entity-embed-settings'] : [],
     ];
+
     $form_state->set('entity_element', $entity_element);
     $entity = $this->entityTypeManager->getStorage($entity_element['data-entity-type'])
       ->loadByProperties(['uuid' => $entity_element['data-entity-uuid']]);
@@ -440,6 +441,24 @@ class EntityEmbedDialog extends FormBase {
       $form['attributes']['data-entity-embed-display-settings'] += $display->buildConfigurationForm($form, $form_state);
     }
 
+    if (isset($form['attributes']['data-entity-embed-display-settings'])) {
+      if (isset($entity_element['data-entity-embed-display-settings']) && !is_array($entity_element['data-entity-embed-display-settings'])) {
+        $entity_element['data-entity-embed-display-settings'] = Json::decode($entity_element['data-entity-embed-display-settings']);
+      }
+      // Supress Drupal's "Link image to" dropdown when embedding an image,
+      // since the 'Link to' option provides this functionality.
+      if (isset($form['attributes']['data-entity-embed-display-settings']['image_link'])) {
+        $form['attributes']['data-entity-embed-display-settings']['image_link']['#type'] = 'hidden';
+        $form['attributes']['data-entity-embed-display-settings']['image_link']['#value'] = '';
+      }
+      $form['attributes']['data-entity-embed-display-settings']['link_url'] = [
+        '#title' => t('Link to'),
+        '#description' => t('The URL you would like this item to link to. Leave blank for none.'),
+        '#type' => 'textfield',
+        '#default_value' => isset($entity_element['data-entity-embed-display-settings']['link_url']) ? Html::decodeEntities($entity_element['data-entity-embed-display-settings']['link_url']) : '',
+      ];
+    }
+
     // When Drupal core's filter_align is being used, the text editor may
     // offer the ability to change the alignment.
     if ($editor->getFilterFormat()->filters('filter_align')->status) {
diff --git a/templates/entity-embed-container.html.twig b/templates/entity-embed-container.html.twig
index 43fedc7..af516da 100644
--- a/templates/entity-embed-container.html.twig
+++ b/templates/entity-embed-container.html.twig
@@ -6,10 +6,11 @@
  * Available variables:
  * - attributes: HTML attributes for the containing element.
  * - children: The rendered child elements of the container.
+ * - url: The (sanitized) URL to link the embedded entity to, if any.
  *
  * @see template_preprocess_entity_embed_container()
  *
  * @ingroup themeable
  */
 #}
-<article{{ attributes }}>{{ children }}</article>
+<article{{ attributes }}>{% if url %}<a href='{{ url }}' {{ url_attributes|default('') }}>{{ children }}</a>{% else %}{{ children }}{% endif %}</article>
