Yeni sayfaların varlığını arama motoruna bildirmek ve güncel site yapısını iletmek için, tüm dahili bağlantıları içeren bir sitemap.xml dosyasını oluşturmanız gerekmektedir. Bunu oluşturmak için birkaç yöntem vardır: harici hizmetleri kullanabilir veya CMS'inize özel bir eklenti ekleyebilirsiniz. Her yöntemin kendi avantajları ve dezavantajları vardır.
Bu örnekte, site haritası dosyasını ayrı bir PHP komut dosyasıyla oluşturmayı ele alacağız. Bu komut dosyasını internetten bulduk ve dosyaların başlıklarında yazarına bağlantılar ekledik. Yazarın sayfasını ziyaret ederek komut dosyasını oradan indirebilirsiniz. Burada, dosyalarda birkaç küçük düzenleme yaptığımız için beklentilerimize uygun hale getirilmiş bir biçimde sunuyoruz.
1. Komut Dosyası Klasörünü Oluşturalım
mkdir sitemap-gen
1.1 Aşağıdaki İsimlerde 3 Dosya Oluşturalım
cd sitemap-gen
touch sitemap.php
touch sitemap.functions.php
touch sitemap.config.php
sitemap.php
Yeni bir sitemap.php dosyası oluşturun ve aşağıdaki içeriği ekleyin: <?php
/***************************\
|***BU DOSYAYI DÜZENLEMEYİN***|
|**sitemap.config.php DOSYASINI DÜZENLEYİN**|
\***************************/
error_reporting(E_ALL);
// Küresel değişkenleri yapılandırma dosyasından oku
require_once('sitemap.config.php');
// Tüm fonksiyonları dahil et
require_once('sitemap.functions.php');
// Varsayılan HTML başlığı tarayıcıların \n karakterini yok saymasını sağlar
header("Content-Type: text/plain");
$color = false;
$version_script = 2;
if ($version_script != $version_functions || $version_functions != $version_config){
logger("Komut dosyası sürümleri uyumsuz!", 3);
logger("Güncelleme gerekli", 3);
logger("sitemap.functions.php sürümü: " . $version_functions, 3);
logger("sitemap.config.php sürümü: " . $version_config, 3);
logger("sitemap.php sürümü: " . $version_script, 3);
logger("Yeni dosyaları buradan indirin: https://www.github.com/knyzorg/sitemap-generator-crawler", 3);
die("Durduruldu.");
}
// PHP CLI desteği ekle
if (php_sapi_name() === 'cli' && PHP_OS != 'WINNT') {
parse_str(implode('&', array_slice($argv, 1)), $args);
$color = true;
}
// CLI ile değişken yüklemeye izin ver
if (isset($args['file'])) {
$file = $args['file'];
}
if (isset($args['site'])) {
$site = $args['site'];
}
if (isset($args['max_depth'])) {
$max_depth = $args['max_depth'];
}
if (isset($args['enable_frequency'])) {
$enable_frequency = $args['enable_frequency'];
}
if (isset($args['enable_priority'])) {
$enable_priority = $args['enable_priority'];
}
if (isset($args['enable_modified'])) {
$enable_modified = $args['enable_modified'];
}
if (isset($args['freq'])) {
$freq = $args['freq'];
}
if (isset($args['priority'])) {
$priority = $args['priority'];
}
if (isset($args['blacklist'])) {
$blacklist = $args['blacklist'];
}
if (isset($args['debug'])) {
$debug = $args['debug'];
}
if (isset($args['ignore_arguments'])) {
$ignore_arguments = !!$args['ignore_arguments'];
}
if (isset($args['pdf_index'])) {
$pdf_index = $args['pdf_index'];
}
// İstatistikler için kronometreyi başlat
$start = microtime(true);
// Dosya akışını ayarla
$tempfile = tempnam(sys_get_temp_dir(), 'sitemap.xml.');
$file_stream = fopen($tempfile, "w") or die("Hata: Geçici dosya $tempfile oluşturulamadı\n");
fwrite($file_stream, $xmlheader . "\n");
// Küresel değişkenler, kullanıcı tanımlı olmayan
$depth = 0;
$indexed = 0;
$scanned = array();
$deferredLinks = array();
// Etki alanını kök seviyesine indir
$real_site = domain_root($site);
if ($real_site != $site){
logger("$site adresini $real_site olarak yeniden düzenlendi", 2);
}
// Orijinal URL'yi tarayarak başlayın
scan_url($real_site);
// Site haritasını tamamla
fwrite($file_stream, "</urlset>\n");
fclose($file_stream);
// Site haritasını düzgün yazdır
if ((PHP_OS == 'WINNT') ? `where xmllint` : `which xmllint`) {
logger("xmllint bulundu, site haritası düzgün biçimlendiriliyor", 0);
$responsevalue = exec('xmllint --format ' . $tempfile . ' -o ' . $tempfile . ' 2>&1', $discardedoutputvalue, $returnvalue);
if ($returnvalue) {
die("Hata: " . $responsevalue . "\n");
}
}
// İstatistikleri oluştur ve yazdır
$time_elapsed_secs = round(microtime(true) - $start, 2);
logger("Site haritası $time_elapsed_secs saniyede oluşturuldu ve $file kaydedildi.", 0);
$size = sizeof($scanned);
logger("Toplamda $size sayfa tarandı ve $indexed sayfa indekslendi.", 0);
// Geçici dosyayı gerçek dosya adıyla değiştirin
rename($tempfile, $file);
// İzinleri ayarla
chmod($file, $permissions);
// Komut dosyasının tamamlandığını bildir ve çık
logger("İşlem Tamamlandı", 0);
sitemap.functions.php
Yeni bir sitemap.functions.php dosyası oluşturun ve aşağıdaki içeriği ekleyin: <?php
// Loglama için soyutlanmış fonksiyon
function logger($message, $type)
{
global $debug, $color;
if ($color) {
switch ($type) {
case 0:
//ekle
echo $debug["add"] ? "\033[0;32m [+] $message \033[0m\n" : "";
break;
case 1:
//reddet
echo $debug["reject"] ? "\033[0;31m [-] $message \033[0m\n" : "";
break;
case 2:
//uyarı
echo $debug["warn"] ? "\033[1;33m [!] $message \033[0m\n" : "";
break;
case 3:
//kritik
echo "\033[1;33m [!] $message \033[0m\n";
break;
}
return;
}
switch ($type) {
case 0:
echo $debug["add"] ? "[+] $message\n" : "";
break;
case 1:
echo $debug["reject"] ? "31m [-] $message\n" : "";
break;
case 2:
echo $debug["warn"] ? "[!] $message\n" : "";
break;
case 3:
echo "[!] $message\n";
break;
}
}
...
sitemap.config.php
Yeni bir sitemap.config.php dosyası oluşturun ve aşağıdaki içeriği ekleyin:<?php
/*
Sitemap Generator by Slava Knyazev. Further acknowledgements in the README.md file.
Website: https://www.knyz.org/
I also live on GitHub: https://github.com/knyzorg
Contact me: Slava@KNYZ.org
*/
//Make sure to use the latest revision by downloading from github: https://github.com/knyzorg/Sitemap-Generator-Crawler
/* Usage
Usage is pretty strait forward:
- Configure the crawler by editing this file.
- Select the file to which the sitemap will be saved
- Select URL to crawl
- Configure blacklists, accepts the use of wildcards (example: http://example.com/private/* and *.jpg)
- Generate sitemap
- Either send a GET request to this script or run it from the command line (refer to README file)
- Submit to Google
- Setup a CRON Job execute this script every so often
It is recommended you don't remove the above for future reference.
*/
//date_default_timezone_set('Europe/Moscow');
date_default_timezone_set('Etc/GMT-1');
// Default site to crawl
$site = "https://synay.net";
// Default sitemap filename
$file = "sitemap.xml";
$permissions = 0644;
// Depth of the crawl, 0 is unlimited
$max_depth = 0;
// Show changefreq
$enable_frequency = true;
// Show priority
$enable_priority = true;
// Default values for changefreq and priority
$freq = "daily";
$priority = "1.00";
// Add lastmod based on server response. Unreliable and disabled by default.
$enable_modified = true;
// Disable this for misconfigured, but tolerable SSL server.
$curl_validate_certificate = true;
// The pages will be excluded from crawl and sitemap.
// Use for exluding non-html files to increase performance and save bandwidth.
$blacklist = array(
"*.jpg",
"*/manager/*",
"https://synay.net/manager"
);
// Enable this if your site do requires GET arguments to function
$ignore_arguments = false;
// Not yet implemented. See issue #19 for more information.
$index_img = false;
//Index PDFs
$index_pdf = true;
// Set the user agent for crawler
$crawler_user_agent = "Mozilla/5.0 (compatible; Sitemap Generator Crawler; +https://synay.net";
// Header of the sitemap.xml
$xmlheader ='<?xml version="1.0" encoding="UTF-8"?>
<!-- Sitemap file generated for https://synay.net at '. date("D M j G:i:s T Y") . ' -->
<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">';
// Optionally configure debug options
$debug = array(
"add" => true,
"reject" => false,
"warn" => false
);
//Modify only if configuration version is broken
$version_config = 2;
Dosyaların içeriğini aynı isimle oluşturulanlara kopyalayın.
2. Script'i Çalıştırma
Sitemap-gen klasörünün kök dizininde bulunarak, domain.tld yerine kendi domaininizi ve sitemap.xml dosyasının kaydedileceği yolu belirtin.
php sitemap.php file=/home/user/sitemap-gen/sitemap.xml site=https://domain.tld
Bu örnekte php-xml modülüne sahip php 8.1 kullanılmıştır.
Script, sitenizdeki tüm dahili bağlantıları tarayacak ve işlem tamamlandığında harcanan süreyi belirterek sizi bilgilendirecektir.
Oluşturma süreci sırasında, hangi sayfaların tarandığını da görebileceksiniz.
5000 sayfalık bir sitemap oluşturmak yaklaşık 45 dakika sürdü.
İsterseniz bu görevi cron'a ekleyerek script'in sitemap.xml dosyasındaki verileri düzenli olarak güncellemesini sağlayabilirsiniz.