Link checker, https://www.drupal.org/project/linkchecker, helps your SEO by helping you fix broken links before the search engines downgrade your Web site.
This documentation is based on experience with Link Checker version 7.x-1.2.
Configuration is at
Scan content types for links
Select the content types you want scanned. large sites can start with one content type then expand out.
Scan comments for links
Switch this on for site with links in moderated comments. Do not allow links in comments without some sort of moderation.
Scan blocks for links
Links in blocks are usually from advertisers. You might check their links when you have unmoderated advertising form classified style adverts.
What type of links should be checked?
External, internal, or both?
The following is a cut and past of the README.txt file.
Link Checker ------------ Installation: 1. Install linkchecker via Modules page. 2. Go to Modules and enable the "Link checker" module. 3. Go to Configuration -> Content authoring -> Link checker and enable the node types to scan. 4. Under "Link extraction" check all HTML tags that should be scanned. 5. Adjust the other settings if the defaults don't suit your needs. 6. Save configuration 7. Wait for cron to check all your links... this may take some time! :-) If links are broken they appear under Reports -> Broken links. If not, make sure cron is configured and running properly on your Drupal installation. The Link checker module also logs somewhat useful info about it's activity under Reports -> Recent log messages. Required: 1. For internal URL extraction you need to make sure that Cron always get called with your real public site URL (for e.g. http://example.com/cron.php). Make sure it's never executed with http://localhost/cron.php or any other hostnames or ports, not available from public. Otherwise all links may be reported as broken and cannot verified as they should be. To make sure it always works - it's required to configure the $base_url in the sites settings.php with your public sites URL. Better safe than sorry! Known issues: There are a lot of known issues in drupal_http_request(). These have been solved in HTTPRL. As a workaround it's recommended to use HTTPRL in linkchecker. Issues list: * #997648: drupal_http_request() always calls fread() one more time than necessary * #164365-12: drupal_http_request() does handle (invalid) non-absolute redirects * #205969-11: drupal_http_request() assumes presence of Reason-Phrase in response Status-Line * #371495: Error message from drupal_http_request() not UTF8 encoded * #193073-11: drupal_http_request - socket not initialized * #106506-8: drupal_http_request() does not handle 'chunked' responses - Make it support HTTP 1.1 * #1096890-15: drupal_http_request should return error if reaches max allowed redirects * #875342-21: drupal_http_request() should pick up X-Drupal-Assertion-* HTTP headers * #965078-31: HTTP request checking is unreliable and should be removed in favor of watchdog() calls * #336367: HTTP client should protect commas when folding (compatibility with legacy HTTP/1.0) * #45338: log fsockopen errors to watchdog