diff --git a/linkchecker.module b/linkchecker.module
index 311a0a0..dbc788b 100644
--- a/linkchecker.module
+++ b/linkchecker.module
@@ -163,6 +163,22 @@ function linkchecker_cron() {
 
     // Fetch URL.
     $response = drupal_http_request($link->url, array('headers' => array('User-Agent' => 'User-Agent: ' . $useragent), 'method' => $link->method, 'max_redirects' => 1));
+
+    // Absolute URIs are specified for redirects by RFC2616 section 14.30, but many web servers use relative URIs.
+    // The error message "Missing schema" is not very informative and doesn't tell the user if the link is broken.
+    // Instead we try to build the absolute URI and get the new response.
+    if ($response->code==-1002) {
+     if (($response->redirect_code>=300) and ($response->redirect_code<400) and isset($response->redirect_url)) {
+       $uri = @parse_url($link->url);
+       if ( (isset($uri['scheme'])) and (isset($uri['host'])) ) {
+         // build url with path set to $response->redirect_url
+         $new_url = $uri['scheme'] . '://' . $uri['host'] . (isset($uri['port']) && ($uri['port'] != 80) ? ':' . $uri['port'] : '') . ($response->redirect_url{0}!='/' ? '/' : '') . $response->redirect_url;
+         $response = drupal_http_request($new_url, array('headers' => array('User-Agent' => 'User-Agent: ' . $useragent), 'method' => $link->method, 'max_redirects' => 1));
+         watchdog('linkchecker', '"Missing schema" link %link, new url %new_url, debug: %response', array('%link' => $link->lid, '%new_url' => $new_url, '%response' => print_r($response, TRUE)), WATCHDOG_INFO, l(t('Broken links'), 'admin/bcc-reports/links_all'));
+       }
+     }
+    }
+
     _linkchecker_status_handling($link, $response);
   }
 }
