Not a developer? Go to


TrackBack Specification


The standalone TrackBack tool serves two purposes: 1) it allows non-Movable Type users to use TrackBack with the tool of their choice, provided they meet the installation requirements; 2) it serves as a reference point to aid developers in implementing TrackBack in their own systems. This tool is a single CGI script that accepts TrackBack pings through HTTP requests, stores the pings locally in the filesystem, and can return a list of pings either in RSS or in a browser-viewable format. It can also be used to send pings to other sites.

It is released under the Artistic License. The terms of the Artistic License are described at


You’ll need a webserver capable of running CGI scripts (this means, for example, that this won’t work with BlogSpot-hosted blogs). You’ll also need perl, and the following Perl modules:

  • File::Spec
  • Storable
  • CGI
  • CGI::Cookie
  • LWP

The first four are core modules as of perl 5.6.0, I believe, and LWP is installed on most hosts. Furthermore LWP is only required if you wish to send TrackBack pings.


Installation of the standalone TrackBack tool is very simple. It’s just one CGI script, tb.cgi, along with two text files that define the header and footer HTML for the public list of TrackBack pings.

  1. Configure tb.cgi
    You’ll need to edit the script to change the $DataDir, $RSSDir, and $Password settings.


    $DataDir is the path to the directory where the TrackBack data files will be stored; $RSSDir is the path to the directory where the static RSS files will be generated; $Password is your secret password that will allow you to delete TrackBack pings, when logged in.

    After setting $DataDir and $RSSDir, you’ll need to create both of these directories and make them writeable by the user running the CGI scripts. In most cases, this means that you must set the permissions on these directories to 777.

  2. Upload Files
    After editing the settings, upload tb.cgi, header.txt, and footer.txt in ASCII mode to your webserver into a directory where you can run CGI scripts. Set the permissions on tb.cgi to 755.


Sending Pings

To send pings from the tool, go to the following URL:

where is the URL where you installed tb.cgi. Fill out the fields in the form, then press Send.

Receiving Pings

To use the tool in your existing pages, you’ll need to do two things:

  1. Link to TrackBack listing
    First, you’ll need to add a link to each of your weblog entries with a link to the list of TrackBack pings for that entry. You can do this by adding the following HTML to your template:
    <a href="[TrackBack ID]" onclick=", 'trackback', 'width=480,height=480,scrollbars=yes,status=yes'); return false">TrackBack</a>

    You’ll need to change to the proper URL for tb.cgi on your server. And, depending on the weblogging tool that you use, you’ll need to change [TrackBack ID] to a unique post ID. See the conversion table below to determine the proper tag to use for the tool that you use, to generate a unique post ID.

  2. Add RDF
    TrackBack uses RDF embedded within your web page to auto-discover TrackBack-enabled entries on your pages. It also uses this information when building a threaded list of a cross-weblog “discussion”. For these purposes, it is useful to embed the RDF into your page.

    Add the following to your weblog template so that it is displayed for each of the entries on your page:

    <rdf:RDF xmlns:rdf=""
        rdf:about="[Entry Permalink]"
        dc:title="[Entry Title]"
        dc:identifier="[Entry Permalink]" />
        trackback:ping="[TrackBack ID]"

    As above, the tags that you should use for [TrackBack ID], [Entry Title], and [Entry Permalink] all depend on the weblogging tool that you are using. See the conversion table below.

Conversion Table

  • Blogger
    TrackBack ID = <$BlogItemNumber$>

    Entry Title = <PostSubject><$BlogItemSubject$></PostSubject>

    Entry Permalink = <$BlogItemArchiveFileName$>#<$BlogItemNumber$>

  • GreyMatter

    TrackBack ID = {{entrynumber}}

    Entry Title = {{entrysubject}}

    Entry Permalink = {{pagelink}}

  • b2

    TrackBack ID = <?php the_ID() ?>

    Entry Title = <?php the_title() ?>

    Entry Permalink = <?php permalink_link() ?>

  • pMachine

    TrackBack ID = %%id%%

    Entry Title = %%title%%

    Entry Permalink = %%comment_permalink%%

  • Bloxsom

    TrackBack ID = $fn

    Entry Title = $title

    Entry Permalink = $url/$yr/$mo/$da#$fn

    Thanks to Rael for this list of conversions.


  1. Content repository
    Like Movable Type’s TrackBack implementation, this standalone script can be used to power a distributed content repository. The value of the tb_id parameter does not necessarily have to be an integer, because all it is used for is a filename (note that this is not true of most other TrackBack implementations). For example, if you run a site about cats, and want to have a way for users to ping your site with entries they write about their own cats, you could set up a TrackBack URL like, then give that URL out on your site. End users could then associate this URL with a Cats category in their own blog, and ping you whenever they wrote about cats.

  2. Building block

    You can use this simple implementation as a building block, or a guide, for implementing TrackBack in your own system. It illustrates the core functionality of the TrackBack framework, onto which you could add bells and whistles (IP banning, password-protected TrackBacks, etc).

  3. Centralized tool

    This TrackBack tool requires that the end user have the ability to run CGI scripts on their server. For many users (eg BlogSpot users), this is not an option. For such users, a centralized system (based on this tool, perhaps) would be ideal.