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());

Slična pitanja

1 odgovor 393 👀
1 odgovor 426 👀
1 odgovor 914 👀
Marinko Zadro 14.04.2015. pitanje u rubrici Programiranje od Marinko Zadro
2 odgovora 628 👀
5 odgovora 1.4k 👀
11.12.2013. pitanje u rubrici Web Marketing od i_mark
1 odgovor 2.5k 👀
Znatko predstavlja

Umjetna inteligencija u službi prodaje

Zagreb
24. - 25. 10. 2024.

KUPI ULAZNICU
Znatko predstavlja

Najnoviji trendovi u IT industriji

Zagreb
28. i 29. 11. 2024.

KUPI ULAZNICU

14.0k pitanja

22.7k odgovora

8.5k komentara

1.6k korisnika

...