diff --git a/modules/render_cache_node/render_cache_node.module b/modules/render_cache_node/render_cache_node.module
index c8e94e9..d995c72 100644
--- a/modules/render_cache_node/render_cache_node.module
+++ b/modules/render_cache_node/render_cache_node.module
@@ -31,6 +31,16 @@ function render_cache_node_menu_alter(&$items) {
  * @see node_show()
  */
 function render_cache_node_node_show($node, $message = FALSE) {
+  // If there is a menu link to this node, the link becomes the last part
+  // of the active trail, and the link name becomes the page title.
+  // Thus, we must explicitly set the page title to be the node title.
+  drupal_set_title($node->title);
+  $uri = entity_uri('node', $node);
+  // Set the node path as the canonical URL to prevent duplicate content.
+  drupal_add_html_head_link(array('rel' => 'canonical', 'href' => url($uri['path'], $uri['options'])), TRUE);
+  // Set the non-aliased path as a default shortlink.
+  drupal_add_html_head_link(array('rel' => 'shortlink', 'href' => url($uri['path'], array_merge($uri['options'], array('alias' => TRUE)))), TRUE);
+
   // Do not cache if there is a message.
   if ($message) {
     return node_view($node, $message);
