Querdenkender Webworker mit WordPress-Affinität

Backlinks gecheckt

Wichtiger Hinweis: Der Artikel ist stark veraltet. Bitte lese die aktuellere Neuauflage!

Ich benutze ja schon seit längerem einen externen Service, um meine Linkpartnerschaften zu überwachen. Der angebotene Service ist für mich mehr als ausreichend. Da kann ich mich nur bedanken und artig einen Backlink setzen. Bei der ewigen Diskutiererei der SEO-Szene über Backlinks, gute und schlechte Nachbarschaft, 301- oder 302-Weiterleitungen, Nofollow-Links usw. stellt sich mancher die Frage, wie man einen simplen Check eigentlich in PHP darstellen kann.

Üblicherweise hat der Linkpartner irgendwann mal einen Link in eine Web-Ressource eingefügt, die bei einem Aufruf als HTML ausgeliefert wird und hoffentlich nicht nur eine Weiterleitung auf eine anderes Dokument darstellt. Um Links aus so einem HTML-Dokument zu extrahieren, bietet es sich an, den Quelltext dieses Dokumentes vorher mittels curl zu holen (auch um die fopen-Problematik von vornherein zu vermeiden). Als nächstes ist zu überlegen, wie so ein Link überhaupt aussieht. Mit einem regulären Ausdruck lässt sich ein Hyperlink ganz allgemein als < [aA]+ (.+?)>(.+?)< /[aA]+> darstellen. Weiterhin hat ein Hyperlink (Anchor interessieren mich jetzt nicht) mindestens eine href-Attribut, ist entweder relativ oder absolut (mit http:// vorneweg) und hat eventuell auch ein rel-Attribut, dass den Wert nofollow besitzt. Diese Überlegungen lassen sich in PHP dann beispielsweise so formulieren:

<?php

class Resource {

    var $src;
    var $a;
   
    function Resource () {
        $this->a = array ();
    }

    function source ($url) {
        if (empty ($this->src)) {
            $ch = curl_init ($url);
            curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
            $this->src = curl_exec ($ch);
        }
        return $this->src;
    }

    function links () {
        if (empty ($this->a)) {
            if (preg_match_all ('/<[aA]+ (.+?)>(.+?)<\/[aA]+>/', $this->src, $regs, PREG_SET_ORDER)) {
                foreach ($regs as $reg) {
                    $this->a[] = new Anchor ($reg);
                }
            }
        }
        return $this->a;
    }
   
}

class Anchor {

    var $text;
    var $attr;

    function Anchor ($arr) {
        foreach (split (' ', $arr[1]) as $attr) {
            list ($key, $value) = split ('=', $attr);
            $this->attr[strtolower ($key)] = trim ($value, '"');
        }
        $this->text = $arr[2];
    }

    function attribute ($key) {
        return (isset ($this->attr[$key]) ? $this->attr[$key]:NULL);
    }

    function is_absolut () {
        return (ereg ("^http://", $this->attribute ('href')) ? TRUE:FALSE);
    }

}

$urls =
    array (
        'http://lloc.de/',
        'http://www.freely.de',
        'http://www.bowling.bz',
    );

?>
<html>
    <head>
        <title>Linkcheck</title>
    </head>
    <body>
        <h1>Linkcheck</h1>
<?php

foreach ($urls as $url) {

?>
        <h2><?php echo $url; ?></h2>
<?php

    $res = new Resource ();
    $res->source ($url);
    $links = $res->links ();
    $count = 0;
    if (!empty ($links)) {
?>
        <ul>
<?php

        foreach ($links as $link) {
            if ($link->is_absolut () && !ereg ($url, $link->attribute ('href'))) {

?>
            <li>
                <a href="<?php echo $link->attribute ('href'); ?>"><?php echo $link->attribute ('href'); ?></a>
                <?php echo ': ' . ($link->attribute ('rel') == "nofollow" ? "KO":"OK"); ?>
            </li>
<?php

                $count++;
            }
        }

?>
        </ul>
<?php
   
    }
    else {
   
?>
        <p>There is nothing!</p>
<?php

    }

?>
        <p><?php echo $count; ?> external links.</p>
<?php

}

?>
    </body>
</html>

Mit diesen Klassen kann man dann beispielsweise eine eigene HTML-Seite bauen, die wie im kompletten Beispiel (Quelltext), alle ausgehenden Links die Information, ob nofollow oder nicht (als KO bzw. OK dargestellt) und einen Zähler der Anzahl der angezeigten Links enthält. Bei einer Umleitung der Seite mit den Backlinks wird einfach “nichts gefunden” gemeldet!

Wer den Code nützlich findet, ist natürlich herzlich eingeladen, einen Backlink zu dieser Seite zu setzen. ;-). Have fun!

Das könnte Dich auch interessieren:

Kommentare

  1. Hallo Dennis,

    jetzt komme ich gerade von Dave’s Blog und schmöhere hier ein bischen.

    Das Beispiel oben ist Klasse erklärt, das habe sogar ich verstanden 😉 Wenn immer alle so gut erklären könnten, würde ich mich sogar ans Programmieren machen. Sicher braucht man dazu einige Zeit. Und die frisst bei mir gerade das WordPress mit allem Drumherum. Auch da braucht man tewas mehr Zeit, um sich so richtig einzuarbeiten. Wenn’s dann klappt ist der Spass umso größer.

    Sicher bekomme ich mein Blog auch bald so zum Laufen wie ich mir denke. Wenn Du möchtest dann kann ich Dir ja Bescheid geben, wenns soweit ist 😉

    Viele Grüße Gerd-E.

  2. Freut mich, dass der Artikel mindestens 1x hilfreich war … 😀

  3. Name (notwendig) meint:

    >>Freut mich, dass der Artikel mindestens 1x hilfreich war

    hat bestimmt mehr als ein mal geholfen
    thx an dieser stelle

Deine Meinung ist uns wichtig

*