diff --git a/schemaorg.module b/schemaorg.module
index 47c81cf..c55b22c 100644
--- a/schemaorg.module
+++ b/schemaorg.module
@@ -66,10 +66,17 @@ function schemaorg_node_type_form_submit($form, &$form_state) {
     // Specifies the title mapping as expected by schema.org. This mapping is
     // always set to schema:name and is not exposed in the UI.
     $mapping['title']['predicates'] = schemaorg_terms_merge('name', $mapping['title']['predicates']);
+    // Sets the mapping for the url of the node. This mapping is
+    // always set to schema:url and is not exposed in the UI.
+    $mapping['url']['predicates'] = array('schema:url');
+    $mapping['url']['type'] = 'rel';
   }
   else {
     // Makes sure no schema.org mapping for title remains if no type is defined.
     $mapping['title']['predicates'] = array_filter($mapping['title']['predicates'], 'schemaorg_filter_schema_term');
+    // Since this pseudo-field mapping is only used for the purpose of
+    // schema.org, it is entirely remove when no type mapping is defined.
+    unset($mapping['url']);
   }
 
   rdf_mapping_save(array(
@@ -165,6 +172,16 @@ function schemaorg_field_ui_field_edit_form_submit($form, &$form_state) {
  * Implements hook_node_view().
  */
 function schemaorg_node_view($node, $view_mode, $langcode) {
+  // Adds the schema.org url to the node content as RDF metadata.
+  if (!empty($node->rdf_mapping['url']['predicates'])) {
+    $attributes = rdf_rdfa_attributes($node->rdf_mapping['url']);
+    $attributes['resource'] = url('node/' . $node->nid);
+    $node->content['schemaorg_url'] = array(
+      '#markup' => theme('rdf_metadata', array('metadata' => array('span' => $attributes))),
+      '#weight' => 100,
+    );
+  }
+
   // It seems parsers are expecting to find the title/name of the node within
   // the body of the node. Drupal displays the title outside the body on full
   // node display, so we assert it in the body as hidden RDF metadata.
diff --git a/schemaorg.test b/schemaorg.test
index e0d9791..45572f1 100644
--- a/schemaorg.test
+++ b/schemaorg.test
@@ -86,8 +86,15 @@ class SchemaorgFieldUIManageFieldsTestCase extends FieldUITestCase {
         'dc:title',
       ),
     );
+    $rdf_mapping_url_expected = array(
+      'predicates' => array(
+        'schema:url',
+      ),
+      'type' => 'rel',
+    );
     $this->assertEqual($rdf_mapping['rdftype'], $rdf_mapping_type_expected, t('The schema.org type was correctly saved.'));
     $this->assertEqual($rdf_mapping['title'], $rdf_mapping_title_expected, t('The schema.org title property was correctly saved.'));
+    $this->assertEqual($rdf_mapping['url'], $rdf_mapping_url_expected, t('The schema.org url property was correctly saved.'));
 
     // Check that the schema.org terms shows up in the form
     $this->drupalGet($admin_path);
@@ -108,7 +115,9 @@ class SchemaorgFieldUIManageFieldsTestCase extends FieldUITestCase {
         1 => 'dc:title',
       ),
     );
-    $this->assertEqual($rdf_mapping['rdftype'], $rdf_mapping_type_expected, t('The schema.org type was correctly saved.'));
+    $this->assertEqual($rdf_mapping['rdftype'], $rdf_mapping_type_expected, t('The schema.org type mapping was correctly saved.'));
+    $this->assertEqual($rdf_mapping['title'], $rdf_mapping_title_expected, t('The schema.org title mapping was correctly saved.'));
+    $this->assertTrue(!isset($rdf_mapping['url']), t('The schema.org url mapping was correctly saved.'));
   }
 
   /**
