Broken Link Checker for WordPress

Sometimes, links get broken. A page is deleted, a subdirectory forgotten, a site moved to a different domain. Most likely many of your blog posts contain links. It is almost inevitable that over time some of them will lead to a “404 Not Found” error page. Obviously you don’t want your readers to be annoyed by clicking a link that leads nowhere. You can check the links yourself but that might be quite a task if you have a lot of posts. You could use your webserver’s stats but that only works for local links.

So I’ve made a plugin for WordPress that will check your posts (and pages), looking for broken links, and let you know if any are found.

Download it now! (40 KB)

Note : This page, and the feature list below are slightly out of date as a major update has been released recently (see details). I’ll get around to updating this page eventually.

Features

  • Checks your posts (and pages) in the background (whenever the WP admin panel is open ).
  • Detects links that don’t work and missing images. Checks both internal and outbound links.
  • Notifies you on the Dashboard if any problems are found.
  • Link checking intervals can be configured.
  • New/modified posts are checked ASAP.

The broken links show up in the Manage -> Broken Links tab. If any invalid URLs are found a notification will also show up in the sidebar on the Dashboard.

The Broken Links tab displays a list of invalid URLs found along with the relevant posts and the anchor text of the links. “View” and “Edit Post” do exactly what they say and “Discard” will remove the message about a broken link, but not the link itself (so it will show up again later unless you fix it; this plugin doesn’t modify your links).

By default all old posts/links are re-checked every 72 hours, or you can set a different time period.

Notes (Semi-Technical)
I realize there’s a lot of features that could be added to improve this plugin considerably. However, this release is intended to “test the waters” and see if there’s demand for a plugin like this, so I only implemented the most basic functions. The plugin has been upgraded to be slightly beyond “basic” ;)

I thought about using WP’s pseudo-cron to run the link checker by schedule and decided against it. AFAIK the cronjobs execute when a page is requested; since this plugin does some lengthy processing it may increase page load times unacceptably when used in this manner. That’s why I set it to run the checks asynchronously (AJAX) and invisibly in the admin panel.

Installation
Just like any other WordPress plugin -

  1. Download (see below).
  2. Unzip.
  3. Upload the broken-link-checker folder to you wp-content/plugins directory.
  4. Activate the plugin in the Plugins tab.

Upgrading

  1. Deactivate the plugin (important!).
  2. Do steps 1.-3. from “Installation”.
  3. Upload the broken-link-checker folder to you wp-content/plugins directory.
  4. Re-activate the plugin in the Plugins tab.

DownloadCC-GNU GPL
Version 0.5.3 : broken-link-checker.zip (40 Kb)

Requirements

  • WordPress 2.7 or later
  • MySQL 4.1 or later

Starting with version 0.5 this plugin is only compatible with WordPress 2.7 and up. Older versions (e.g. ver. 0.4.14) should work with WP 2.1 – 2.6.x.

Share :
  • Reddit
  • del.icio.us
  • Digg
  • StumbleUpon
  • DZone
  • Ping.fm
  • Sphinn
Related posts :

896 Responses to “Broken Link Checker for WordPress”

Pages: « 120 21 22 23 24 25 26 27 28 [29] 30 » Show All

  1. 837
    Steve Portigal says:

    Thanks – Note that I still have the commented-out version of link-classes.php

    Fetching http://w-shadow.com/redirect302.php

    Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in /home/portigal/domains/portigal.com/public_html/test_redirect.php on line 10

  2. 838
    Steve Portigal says:

    HTTP Header(s)
    HTTP/1.1 302 Found
    Date: Sat, 24 Oct 2009 16:58:40 GMT
    Server: Apache/2.2.13 (Unix) mod_ssl/2.2.13 OpenSSL/0.9.7a mod_bwlimited/1.4 PHP/5.2.10
    X-Powered-By: PHP/5.2.10
    Location: http://w-shadow.com/
    Vary: User-Agent,Accept-Encoding
    Content-Type: text/html; charset=UTF-8

  3. 839
    Steve Portigal says:

    sorry for the multiple comments – the output is in a format that your comment feature doesn’t like, giving me a blank screen upon submit, so I’m snipping out various pieces to see how I can get it to load – I’ll reformat it in Word and see if that helps…

    Response info
    Array

    url => http://w-shadow.com/redirect302.php
    content_type => text/html; charset=UTF-8
    http_code => 302
    header_size => 280
    request_size => 67
    filetime => -1
    ssl_verify_result => 0
    redirect_count => 0
    total_time => 4.325351
    namelookup_time => 4.165701
    connect_time => 4.244815
    pretransfer_time => 4.244826
    size_upload => 0
    size_download => 0
    speed_download => 0
    speed_upload => 0
    download_content_length => -1
    upload_content_length => -1
    starttransfer_time => 4.325252
    redirect_time => 0

    CURL version info
    Array

    version_number => 463621
    age => 3
    features => 1565
    ssl_version_number => 0
    version => 7.19.5
    host => x86_64-unknown-linux-gnu
    ssl_version => OpenSSL/0.9.8b
    libz_version => 1.2.3
    protocols => Array

    0 => tftp
    1 => ftp
    2 => telnet
    3 => dict
    4 => ldap
    5 => http
    6 => https
    7 => ftps

  4. 840
    White Shadow says:

    Right. That warning there – “CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir” – is a clear indication that open_basedir is enabled, and thus redirects don’t work. I was uncertain before, but not any more – this particular error message is generated by PHP itself when a script tries to do something that’s not allowed by the server config.; it can’t be a bug in the script*.

    I’ll add a workaround for situations like this. Redirects will show up in the report, but you’ll have to check each one manually to know where it redirects to (because the plugin still won’t be able to follow the redirect).

    * That sounded ambiguous. What I mean is the error message shows that the server config. really prevents the plugin from following redirects, as opposed to the plugin just incorrectly thinking it can’t follow them and giving up.

  5. 841
    Ricky Buchanan says:

    Thank you for this unbelievably useful plugin. I’ve used it almost since it was first released and find it really wonderfully useful on my blogs for isolating sites I’ve linked to that have since died or moved. The growth in the plugin during the last 2 years has been spectacular too!

    I’m not sure if this is possible, or if it’s just me, etc., but the one thing that really bugs me is that when I’m editing a URL on the broken links page that I can’t just press ‘enter’ to save the changed link – I have to manually click ’save link’. I am forever forgetting to do that because it seems counterintuitive that ‘enter’ doesn’t work.

    The only other tinsy tiny problem I have is that I’d like more documentation – I’m never quite able to remember the differences/effects of “unlink”, “discard”, and “exclude”. Could we have tooltips perhaps for these? I know I’ve looked up the effects a few times but the names aren’t obvious to me so I keep forgetting.

    Again, thanks for the hard work you put in – it’s greatly appreciated!
    r

  6. 842
    White Shadow says:

    Alright, I’ll see if I can make Enter work in that textbox.

    The action links do have tooltips – you just need to hover your cursor over one of them for a few seconds to make a one-line description of the link’s function pop up. This works in all the major web browsers (Firefox, Opera, IE and even Chrome).

  7. 843
    Ahmed says:

    Thanks ,great plugin

  8. 844
    Ricky Buchanan says:

    Ahh – guess the tool tips must be a Safari thing then, it just says “javascript:void(0);” for all the tooltips. Thanks again :)

  9. [...] Почему этот «вредитель» (речь идет о плагине  Broken Link Checker ) так действует — ума не приложу. Регулярно [...]

  10. 846
    Maskil says:

    Hi,
    Please could you update the Changelog on the WordPress.org Plugin Page? It’s still sitting at Version 0.5.16.
    Thanks.

  11. 847
    White Shadow says:

    Done. I’m somewhat surprised someone actually reads those :)

  12. 848
    Joe Banks says:

    Re: Done. I’m somewhat surprised someone actually reads those :)

    Every time I consider an automatic WP plugin upgrade, I read the changelog FIRST in the pop-up window, as seen here:

    There is a new version of Broken Link Checker available. *View version 0.5.18 Details* or *upgrade automatically.*

    In WP on Plugins page, click on *View version 0.5.18 Details* (or any plugins upgrade) to see what we’re talking about.

  13. 849
    White Shadow says:

    I’m aware of that feature; my previous comment wasn’t entirely serious.

  14. 850
    Joe Banks says:

    Pardon my assumption. :) I’m just surprised at the number of plug-in authors who don’t bother with the Changelog, or decide to *only* host the Changelog on their own site. Your efforts and hard work always appreciated and not taken lightly!

  15. 851
    daizan says:

    How can i get broken link checker to check my links in user comments?

  16. 852
    White Shadow says:

    It’s on my to-do list, but it will be a while before I actually get around to implementing it. The next thing I plan to work on is internationalization.

  17. 853
    Steve Portigal says:

    At the suggestion of my ISP, I created a fresh WP install elsewhere on the same server, installed your plugin, then did a PHP-info. “The difference between the local and global settings for open_basedir meant that it was being set elsewhere a second time. I dug into the DirectAdmin administration menus and found an open_basedir setting that I had not noticed before (maybe a recent feature in DirectAdmin). I have switched this off. I think this will solve the problem.”

    And back on portigal.com, the debug settings for your pluin are
    PHP version 5.2.5
    MySQL version 5.0.41-community
    CURL version 7.19.5
    Snoopy Installed
    Safe mode Off
    open_basedir Off
    Lockfile /tmp/wp_blc_lock

    I think we’re good?! Thanks for all your help!

  18. 854
    White Shadow says:

    Note : A few comments on this post have been irretrievably lost due to a server crash.

  19. [...] Broken Link Checker [...]

  20. 856
    gaianorm says:

    Hi, service information…
    I noticed that the sentence “Found %d broken link” has a label (view broken link) that cannot be translated.
    Bye
    Giacomo

  21. 857
    Brent P. Newhall says:

    Hi there! Thanks so much for creating this. It’s working great, with one exception: one particular server always returns a 400 error to Broken Link Checker, but I can load the pages in a standard web browser just fine.

    Here are the details for one of the broken links:

    . Post published on : October 27, 2009
    . Link last checked : October 30, 2009
    . HTTP code : 400
    . Response time : 2.306 seconds
    . Final URL : http://www.animenews.biz/viz-to-publish-rin-ne-volume-1-on-october-20th-2222/
    . Redirect count : 0
    . Instance count : 1
    . 
This link has failed 2 times.

    Log : === First try : 0 (No response) ===
    

HTTP/1.1 400 Bad Behavior
    
Date: Fri, 30 Oct 2009 14:39:05 GMT

    Server: Apache/2.2.8 (Unix) mod_ssl/2.2.8 OpenSSL/0.9.7a mod_auth_passthrough/2.1 mod_bwlimited/1.4 PHP/5.2.5
    
X-Powered-By: PHP/5.2.5

    Status: 400 Bad Behavior

    Connection: close

    Content-Type: text/html




    Trying a second time with different settings…

    === Second try : 0 (No response) ===


    HTTP/1.1 400 Bad Behavior

    Date: Fri, 30 Oct 2009 14:39:08 GMT
    
Server: Apache/2.2.8 (Unix) mod_ssl/2.2.8 OpenSSL/0.9.7a mod_auth_passthrough/2.1 mod_bwlimited/1.4 PHP/5.2.5

    X-Powered-By: PHP/5.2.5

    Status: 400 Bad Behavior

    Content-Length: 978
    
Connection: close

    Content-Type: text/html

    


Link is broken.

  22. 858
    White Shadow says:

    @ Brent : This is a known issue. That site is running the the Bad Behaviour module, which tends to be a bit overzealous about blocking automated web requests. As far as I know, there is currently no practical way to fix this in the plugin.

  23. [...] Translators Wanted I’ve recently added internationalization support to my Broken Link Checker plugin, so if you like the plugin and would like to see it in your own language, consider contributing a [...]

  24. [...] Broken link Checker Search engines do not like broken links. This plugin ensures you have none [...]

  25. [...] Broken Link Checker (http://w-shadow.com/blog/2007/08/05/broken-link-checker-for-wordpress/) [...]

  26. [...] Broken Link Checker [...]

  27. 864
    Mike says:

    Hi,

    Can you tell me if your plugin can detect parked domains? Will that be counted as a broken link?

    I know there’s many who leave blog comments with their URL, and one year later, the site is abandoned and turned into a parked domain.

    I don’t want any links going to their parked domains…..

  28. 865
    White Shadow says:

    No, that’s not currently possible. I’m not even sure how one could detect a parked domain, but I may look into it.

  29. [...] Version 0.5.13 | Par Janis Elsts | Aller sur le site de l’extension [...]

Pages: « 120 21 22 23 24 25 26 27 28 [29] 30 » Show All

Leave a Reply