Mario Daka u rubrici Programiranje od

Dakle, izvadim iz baze sadržaj (čitaj: string) u HTML-u sa svim i svačim od HTML elemenata, a među njima je u tom stringu i hrpa URL-ova unutar taga <a href>. E sad, trebao bih sve te tagove provjeriti da li imaju već nofollow paramtera u tagu tj. ako nemaju, kako da ga dodam na sve linkove tog stringa?

Imam npr. ovo:

  • <a class="crveni" href="http //nesto.hr">Nešto je link</a>

...i želim pretvoriti sve takve u ovo:

  • <a rel="nofollow" class="crveni" href="http //nesto.hr">Nešto je link</a>

Znate da to trebam kako bi sačuvao tzv. link-juice. Zbog SEO metoda. Programiram u PHP-u.

Prijavite se ili registrirajte kako biste odgovorili na ovo pitanje.

1 odgovor

+10 glasa
Hrvoje Novak od
odabran od Mario Daka
 
Najbolji odgovor

Evo jednog od modernijih rješeanja u PHP-u:

$str = '<a href="http //localhost/test/">interno</a>
<a href="http //localhost/mytest/go/hostgator">neki link</a>
<a href="http //nesto.hr" rel="me">vanski link</a>
<a href="http //svastanesto.com">vanjski</a>
<a href="http //example.com" rel="nofollow">vanjski al
već sa nofollow</a>';
 
$dom = new DOMDocument();
$dom->preserveWhitespace = FALSE;
$dom->loadHTML($str);
$a = $dom->getElementsByTagName('a');
$host = strtok($_SERVER['HTTP_HOST'], ':');
 
foreach($a as $anchor) {
        $href = $anchor->attributes->getNamedItem('href')->nodeValue;
 
        if (preg_match('/^https?:\/\/' . preg_quote($host, '/') . '/', $href)) {
           continue;
        }
 
        $noFollowRel = 'nofollow';
        $oldRelAtt = $anchor->attributes->getNamedItem('rel');
 
        if ($oldRelAtt == NULL) {
            $newRel = $noFollowRel;
        } else {
            $oldRel = $oldRelAtt->nodeValue;
            $oldRel = explode(' ', $oldRel);
            if (in_array($noFollowRel, $oldRel)) {
                continue;
            }
            $oldRel[] = $noFollowRel;
            $newRel = implode($oldRel,  ' ');
        }
 
        $newRelAtt = $dom->createAttribute('rel');
        $noFollowNode = $dom->createTextNode($newRel);
        $newRelAtt->appendChild($noFollowNode);
        $anchor->appendChild($newRelAtt);
}
 
var_dump($dom->saveHTML());

Možda Vas zanimaju i ova pitanja...

1 odgovor 491 👀
1 odgovor 463 👀
1 odgovor 1.0k 👀
Marinko Zadro 14.04.2015. pitanje u rubrici Programiranje od Marinko Zadro
2 odgovora 730 👀
5 odgovora 1.6k 👀
11.12.2013. pitanje u rubrici Web Marketing od i_mark
1 odgovor 2.6k 👀

Medijska platforma Znatko

NAJNOVIJE VIJESTI

Impressum | Znatkova redakcija

15.7k pitanja

25.5k odgovora

10.2k komentara

1.7k korisnika

...