523 pregleda
Mario Daka u rubrici Programiranje od Mario Daka (15.7k bodova)

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

+8 glasa
Hrvoje Novak od Hrvoje Novak (12.8k bodova)
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

2 odgovora
1 odgovor
Mario Daka 15.02.2014. pitanje u rubrici Programiranje od Mario Daka (15.7k bodova)
1 odgovor
Mario Daka 15.02.2014. pitanje u rubrici Programiranje od Mario Daka (15.7k bodova)
1 odgovor
Marinko Zadro 14.04.2015. pitanje u rubrici Programiranje od Marinko Zadro (6.9k bodova)
Znatko medijski pokriva

Zagreb, 29. i 30.11. 2022.

ULAZNICE
Znatko medijski pokriva

GAME CHANGER



Prva poslovna gaming i metaverse konferencija

Zagreb, 01.12.2022.

KOTIZACIJE
Znatko medijski pokriva

NEM Zagreb 2022



Središnje mjesto okupljanja producenata, scenarista, produkcijskih kuća, predstavnika FTA televizija, pay TV kanala, streaming servisa te ostalih stvaratelja sadržaja

Zagreb, 07. - 09.12.2022.

ULAZNICA
Znatko medijski pokriva

WINE EnoGASTRO Vip Event 2023



Rijeka, 1. ožujka 2023.
Novigrad (Istra), 3. ožujka 2023.
Split, 15. ožujka 2023.
Zadar, 17. ožujka 2023.
Zagreb, 29. ožujka 2023.

Besplatan ulaz za uzvanike

Medijska platforma Znatko

NAJNOVIJE VIJESTI

Impressum | Znatkova redakcija

Gdje pratiti Znatka?



[ Pretraživanje Znatka ]

9.6k pitanja

15.0k odgovora

3.4k komentara

1.4k korisnika

...