diff --git a/amp.module b/amp.module
index 5c1c488..1256e2a 100644
--- a/amp.module
+++ b/amp.module
@@ -508,6 +508,7 @@ function amp_node_view($node, $view_mode, $langcode) {
   if ($view_mode == 'full' && node_is_page($node) && in_array($node->type, amp_get_enabled_types())) {
     $uri = entity_uri('node', $node);
     $uri['options']['query']['amp'] = NULL;
+    $uri['options']['absolute'] = TRUE;
     drupal_add_html_head_link(array('rel' => 'amphtml', 'href' => url($uri['path'], $uri['options'])), TRUE);
   }
 }
@@ -1192,3 +1193,24 @@ function amp_page_delivery_callback_alter(&$deliver_callback) {
     $deliver_callback = 'amp_deliver_html_page';
   }
 }
+
+/**
+ * Implements hook_html_head_alter().
+ */
+function amp_html_head_alter(&$head_elements) {
+  // Make canonical links absolute for AMP content.
+  if (amp_is_amp_request()) {
+    foreach ($head_elements as $key => &$tag) {
+      if (strpos($key, 'drupal_add_html_head_link:canonical:') === 0) {
+        if (isset($tag['#attributes']['href'])) {
+          $relative_url = $tag['#attributes']['href'];
+          // Double check that we are converting relative URLs to absolute URLs.
+          if ($relative_url == drupal_get_normal_path($relative_url)) {
+            $absolute_url = url($relative_url, array('absolute' => TRUE));
+          }
+          $tag['#attributes']['href'] = $absolute_url;
+        }
+      }
+    }
+  }
+}
