Autor Zpráva
kironet96
Profil
Dobrý večer,

chtěl bych se poradit.
Potřebují udělat sitemap, ale aby se generovalo automaticky, takže php script.

Jenže nechápu jak to udělat, nejdřív jsem zkoušel vytahnout všechna url z <body>, ale pak mi docvalko že tam vlastně nemusej být všechna url.
Pak jsem proseděl pár hodin hledáním a nic moc nenašel.

Tak bych chtěl poprosit jestli mi někdo nevysvětlíte jak na to, nebo jestli někdo nemáte funkční script.

Děkuji


Tu je ten můj pokus:

<?php
header("Content-Type: application/xml; charset=utf-8");
echo '<?xml version="1.0" encoding="UTF-8"?>'.PHP_EOL;
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">' .PHP_EOL;
function sitemap($address)
{
    function urlElement($url)
    {
        echo '<url>' . PHP_EOL;
        echo '<loc>' . $url . '</loc>' . PHP_EOL;
        echo '<changefreq>weekly</changefreq>' . PHP_EOL;
        echo '<priority>1.00</priority>' . PHP_EOL;
        echo '</url>' . PHP_EOL;
    }

    function ampReplace($string)
    {
        $complete = str_replace('&', '&amp;', $string);
        return $complete;
    }

    function getUrl($address)
    {
        $html = file_get_contents($address);

        $dom = new DOMDocument();
        @$dom->loadHTML($html);

        $xpath = new DOMXPath($dom);
        $hrefs = $xpath->evaluate("/html/body//a");

        for ($i = 0; $i < $hrefs->length; $i++) {
            $href = $hrefs->item($i);
            $url = $href->getAttribute('href');
            $url = ampReplace($url);
            echo urlElement($address . $url);
        }
    }
    return getUrl($address);
}
sitemap('http://example.com');
echo '</urlset>';
?>
juriad
Profil
kironet96:
Ty bys nejlépe měl znát všechny stránky na webu. A podle toho budeš generovat sitemapu. Třeba můžeš projít celou databázi a třeba víš, že články mají adresu ve formátu: /index.php?article=ciselneId. Pokud nepoužíváš databázi, můžeš projít disk a hledat php soubory v nějakém adresáři.

A pak je také otázkou, zda je sitemapa vůbec potřeba. Pokud se na každou stránku webu dokážeš dostat třemi kliknutími z úvodní stránky (což je přesně to co teď děláš, ale s hloubkou 1 klik), tak sitemapu vůbec nepotřebuješ. Jiná situace je například na zdejší diskusi, existuje tu 150 000 vláken a na většinu z nich vede odkaz jen ze stránkovaní - tedy doklikat se na nějakou stránku může trvat třeba 1000 kliknutí. V takovém případě má sitemapa smysl.

Obvykle ji stačí generovat cronem třeba jednom za čas (při změně), nebo můžeš sitemapu mít rozdělenou na archiv, který se nemění nikdy a aktuality z posledního týdne, nebo ji uložit do souboru a kontrolovat při požadavku, zda je pořád platná (případně ji přegenerovat).
Můžeš si ušetřit práci s xml a použít nějakou knihovnu (ano, umí i generování xml).
kironet96
Profil
juriad:

Díky, to co jsem zkoušel mi pak došlo taky že je jen 1 kliknutí.
Sitemap potřebuji jelikož web má docela dost odkazu na které se dostanu proklikáním se.

Zkusím projít databází, snad se podaří.
kironet96
Profil
Podařilo se mi to udělat pomocí DB a trochu ručně, pro url v menu.

Otázka mimo:

Disallow: /folder/folder1/

Tohle zakáže robotum přístup jen do folder1 nebo to nebude fungovat?

Díky

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: