Vous n'êtes pas identifié(e).
Pages :: 1
Un jour on se rend compte que les generateurs de sitemaps ne marchent pas comme il faudrait...
Alors j'ai codé le mien vite fait. Il est pas parfait mais il marche très bien chez moi alors je partage.
Il marche aussi très bien pour generer le site map d'un autre site
Comme tous les crawler il est un peu long (scan de 2 à 3 page par seconde en local chez moi)
Le page contenant le mot "noindex" sont ecartées (peut importe ou se trouve le mot dans le html.
Le sitemap est mis dans le dossier Logs (pensés à le créer à la racine du site depuis lequel vous executé le script).
Le sitemap est en format txt, pensez à l'editer pour en faire un vrai xml.
$Site = 'https://www.mon-site.com';
$NbPage = 1000000; //Le nombre de page max à scanner (pratique pour faire des test)
//PageBase contient url - visitée bool - resultat crawl text - Indexable bool
$PageBase = array('url' => $Site."/", 'visite' => false, 'resultat_visite' => '', 'indexable' => '');
//Tableau général qui contient toutes les pages
$Tab = array('/' => $PageBase);
//Variable qui arrete le crawl
$ContinueCrawl = true;
while($ContinueCrawl)
{
$i = 0;
foreach($Tab as $LigneCle => $LigneValeur)
{
if($i < $NbPage)
{
$ContinueCrawl = false;
if(empty($LigneValeur['visite'])) //Si toutes les url ont été visitées alors stop les crawl
{
$ContinueCrawl = true;
}
if(!$LigneValeur['visite'])
{
$Tab[$LigneCle]['visite'] = true;
@$html = file_get_contents($Site.$LigneCle);
if($html) //si la page est accessible
{
$Tab[$LigneCle]['resultat_visite'] = true; //Marque la page comme visitée
if(preg_match('#noindex#',$html)) //Verifie qu'elle ne contient pas de noindex
{
$Tab[$LigneCle]['indexable'] = false;
}
else
{
$Tab[$LigneCle]['indexable'] = true;
}
//Extrait les liens
$Matches = array();
//recupère tous ce qui est entre <a et a> et les mets dans le tableau Matches
$Pattern = '#<a.*href="(/[a-zA-Z0-9/-]*\.*[a-zA-Z0-9/-]*)".*>#';
preg_match_all($Pattern,$html,$Matches);
$LiensTrouveSurPage = $Matches[1];
foreach($LiensTrouveSurPage as $UnLienTrouve) //pour chaque lien trouve, on verifie qu il est pas deja dans $Tab
{
if(!isset($Tab[$UnLienTrouve]))
{
$Tab[$UnLienTrouve] = array('url' => $Site.$UnLienTrouve, 'visite' => false, 'resultat_visite' => '', 'indexable' => '');
$ContinueCrawl = true;
}
}
}
else
{
$Tab[$LigneCle]['resultat_visite'] = false;
}
}
$i++;
}
}
}
echo count($Tab)." liens trouvés";
//var_dump($Tab);
$Debut = <<<TEXT
<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n
TEXT;
$monfichier = fopen('Crawl.xml', 'w');
fputs($monfichier, $Debut);
fclose($monfichier);
foreach($Tab as $UneLigne)
{
$Phrase = '';
if($UneLigne['indexable'])
{
$Phrase .= "<url>";
$Phrase .= "\n";
$Phrase .= "\t<loc>";
$Phrase .= $UneLigne['url'];
$Phrase .= "</loc>";
$Phrase .= "\n";
$Phrase .= "\t<lastmod>".date('Y-m-d')."T00:00:00+00:00</lastmod>";
$Phrase .= "\n";
$Phrase .= "\t<changefreq>weekly</changefreq>";
$Phrase .= "\n";
$Phrase .= "\t<priority>1.0000</priority>";
$Phrase .= "\n";
$Phrase .= "</url>";
$Phrase .= "\n";
echo $Phrase.'<br />';
}
//Enregitre tans un fichier
$monfichier = fopen('Crawl.xml', 'a');
fputs($monfichier, $Phrase);
fclose($monfichier);
}
$monfichier = fopen('Crawl.xml', 'a');
fputs($monfichier, "</urlset>");
fclose($monfichier);
?>
Dernière modification par PierreG (2020-07-12 13:36:13)
-----------------------
Tu fais du SEO dans le secteur du service à la personne ? (ou tu connais quelqu'un qui le fait) envoi moi un MP
🔴 Hors ligne
Pages :: 1