سایت مپ یا نقشه سایت یا به انگلیسی Sitemap یکی از بخش های اصلی سایت محسوب می شود که گوگل و سایر موتورهای جستجو می توانند به راحتی با استفاده از آن، به تمامی صفحات قابل ایندکس شما دسترسی داشته باشند. با داشتن یک سایت مپ استاندارد که عموما در فرمت XML است، ما می توانیم صفحاتی که قصد داریم گوگل ایندکس کند را داخل آن معرفی کنیم. اسکریپت های مدیریت محتوا مانند جوملا، وردپرس، دیتالایف و … عموما افزونه هایی برای ساخت یک سایت مپ دارند اما در سایر اسکریپت های خبری یا وبلاگی یا هر اسکریپت دیگری، امکان دارد چنین قابلیتی نداشته باشید اما مطالب جدیدی که تولید می کنید را بخواهید توسط یک سایت مپ به گوگل معرفی کنید.
در این تاپیک از انجمن بی تاک قصد داریم نحوه ساختن یک فایل sitemap.xml
توسط کدهای PHP با قابلیت اتصال به دیتابیس و ساختن خودکار اطلاعات سایت مپ را آموزش دهیم.

توجه:
لازمه داشتن چنین سایت مپی، دیتابیس است. سایت شما باید دارای دیتابیس باشد در غیراینصورت امکان ساختن سایت مپ برای سایتتان وجود نخواهد داشت.
1 . ساخت فایل اجرایی
سایت مپی که قصد داریم بسازیم، تنها با یک فایل PHP می تواند این کار را برایمان انجام دهد. برای شروع، داخل فایل منیجر هاستتان یک پوشه با نام دلخواه بسازید تا بعنوان آدرس سایت مپ از آن استفاده کنیم.
سپس داخل آن یک فایل به نام g.php
ایجاد کنید و کدهای زیر را داخل آن قرار دهید:
<?php
define('DBHOST','localhost'); // دیتابیس
define('DBUSER','db_username'); // یوزرنیم دیتابیس
define('DBPASS','db_password'); // پسورد دیتابیس
define('DBNAME','db_name'); // نام دیتابیس
$db = mysqli_connect(DBHOST, DBUSER, DBPASS, DBNAME);
$db->set_charset('utf8mb4');
if(!$db){
die( "Sorry! There seems to be a problem connecting to our database.");
}
$myFile = "sitemap.xml"; // نام فایل سایت مپ پس از ساخته شدن
$fh = fopen($myFile, 'w') or die("can't open file");
$rss_txt = null;
$rss_txt .= '<?xml version="1.0" encoding="UTF-8"?>';
$rss_txt .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">';
// خط زیر باید با دقت ویرایش شود
$query = mysqli_query($db, "SELECT * FROM posts_table WHERE post_title IS NOT NULL ORDER BY post_id ASC");
while($values_query = mysqli_fetch_assoc($query) ) {
// شناسه مربوط به سلول نام مطلب را جایگزین کنید
$matnepost = $values_query["meta_title"];
if(empty($values_query["meta_title"]) )
{
}
// بجای پابلیک، شناسه سلولی را وارد کنید که می خواهید مطمئن شوید در صورت رعایت آن شرط، لینک وارد سایت مپ نشود
elseif ($values_query["public"] == 0) { }
else
{
$rss_txt .= '<url>';
$rss_txt .= '<loc>https://betalk.ir/'.$values_query["post_id"].'/'.$values_query["post_url"].'</loc>'; // آدرس سایت و ساختار لینک مطالب را با دقت جایگزین کنید
$rss_txt .= '<changefreq>weekly</changefreq>';
$rss_txt .= '<priority>0.8</priority>';
$rss_txt .= '</url>';
}
}
$rss_txt .= '</urlset>';
fwrite($fh, $rss_txt);
fclose($fh);
echo "Sitemap Generated!"; // نمایش متن موفقیت آمیز در صورت ساخته شدن کامل سایت مپ
?>
تنظیمات:
- در ابتدای فایل تنظیمات دیتابیس مربوطه را با دقت وارد کنید. بجای
db_username
یوزرنیم دیتابیس، db_password
پسورد دیتابیس و بجای عبارت db_name
نام دیتابیس را وارد کنید.
- در خط 23، دستور
$query = mysqli_query
باید با دقت ویرایش شود. برای اینکار وارد PHPMyAdmin شوید و شناسه ها و نام ها را با دقت مشاهده کنید. بجای posts_table
نام جدولی که مطالب در آن جا وجود دارد را وارد کنید. بجای post_title
عنوان ستون مربوط به عنوان مطالب را وارد کنید یا ستونی که نباید نال باشد و اگر مقدار آن خالی بود، آن ردیف یا لینک کلا داخل سایت مپ وارد نشود. بجای post_id
هم عنوان ستون مربوط به آی دی مطالب را وارد کنید. این ستون معمولا اولین ستون هر دیتابیس است که به صورت عدد افزایشی قرار دارد. با اینکار قصد داریم لینک ها را به ترتیب آی دی داخل سایت مپ ثبت کنیم.
- در قسمتی از کد بالا، دو دستور شرطی تعریف شده تا به واسطه آن بتوانیم لینک هایی که تمایل نداریم داخل سایت مپ قرار بگیرند را از سایت مپ حذف کنیم. این دستورات شرطی به این صورت هستند:
// شناسه مربوط به سلول نام مطلب را جایگزین کنید
$matnepost = $values_query["meta_title"];
if(empty($values_query["meta_title"]) )
{
}
// بجای پابلیک، شناسه سلولی را وارد کنید که می خواهید مطمئن شوید در صورت رعایت آن شرط، لینک وارد سایت مپ نشود
elseif ($values_query["public"] == 0) { }
اولین دستور شرطی if(empty($values_query["meta_title"]) )
بررسی می کند که آیا در ستون meta_title
یک رکورد دیتابیس، آیا مقداری وارد شده است یا خالی است. در صورتی که یکی از مطالب، این سلول را نداشته باشد یا محتوایی نداشته باشد، آن لینک از سایت مپ بطور خودکار حذف خواهد شد. شما می توانید عنوان ستون دلخواهتان را که می خواهید در صورت خالی بودن، در سایت مپ نباشد را جایگزین کنید.
دومین دستور elseif ($values_query["public"] == 0) { }
است. این دستور برای بررسی رکوردهای عددی استفاده می شود. برای مثال تصور کنید یک فیلد در مطلب وجود دارد که امکان خصوصی یا عمومی کردن مطلب نام دارد و زمانی که آن مطلب خصوصی باشد، مقدار آن سلول عدد 0 است و اگر عمومی باشد مقدار آن عدد 1. بنابراین با جایگزین کردن شناسته ستون چنین رکوردی بجای عبارت public
در این کد، می توانید یک شرط در این خصوص داشته باشید. در این دستور بررسی شده است که اگر مقدار ستون public
در یک مطلب برابر 0 باشد، آن مطلب داخل سایت مپ وارد نشود.
پس از انجام این اقدامات، اکنون نوبت به اصلاح آدرس مطالب در کد بالاست. در خط
$rss_txt .= '<loc>https://betalk.ir/'.$values_query["post_id"].'/'.$values_query["post_url"].'</loc>';
باید بجای آدرس سایت بی تاک، آدرس سایت خودتان را وارد کنید. سپس در ادامه نوع ساختار لینک مطالب را دقیقا به همان صورتی که هست داخل کد وارد کنید. ما در کد بالا فرض کرده ایم که آدرس مطالب، ترکیبی از آدرس سایت + آی دی مطلب + یک عنوان ذخیره شده داخل دیتابیس برای لینک مطلب می باشد. اگر کاراکتر ثابتی داخل آدرس داشته باشید می توانید در کنار اسلش ها یعنی علامت /
وارد کنید. شاید بتوان گفت چالش ساخت سایت مپ، همین اصلاح آدرس مطالب در همین قسمت از کد باشد.
پس از تکمیل کد، فایل جدید را بطور مستقیم داخل مرورگر اجرا کنید. به صورت مثال: https://betalk.ir/sitemap/g.php
و بررسی کنید که آیا خطایی دریافت می کنید یا متن Sitemap Generated را مشاهده می کنید.
اگر عبارت Sitemap Generated را دیدید، بنابراین کد بالا خطای کدنویسی نداشته و اگر وارد پوشه sitemap در فایل منیجر شوید، یک فایل به نام sitemap.xml باید ساخته شده باشد. می توانید این فایل را داخل مرورگر اجرا کنید تا مطمئن شوید لینک مطالب به درستی داخل سایت مپ وارد شده باشند. یعنی: https://betalk.ir/sitemap/sitemap.xml
اگر غیر از عبارت بالا، خطا یا صفحه سفید مشاهده کردید، وارد پوشه sitemap شوید و فایل error_log را بررسی کنید. در این فایل به شما گفته می شود که در کدام قسمت از کدهای سایت مپ مشکل دارید.
تمامی خطاها را رفع کرده و حتما مطمئن شوید که آدرس مطالب به درستی داخل سایت مپ وارد شده باشد در غیراینصورت این لینک های نادرست باعث ثبت خطاهای 404 در پنل گوگل کنسول شما خواهند شد!
2 . ساخت خودکار سایت مپ با کران جاب
پس از اینکه مطمئن شدید فایل اجرایی g.php
به خوبی می تواند سایت مپ موردنظرتان را تولید کند، اکنون وقت آن است که با استفاده از Cron Job هاست، عملیات اجرای این دستورات و ساخت سایت مپ را بطور خودکار انجام دهیم.
برای اینکار وارد پنل هاست شده و از بخش CronJob دستور کران جاب جدیدی به صورت زیر ایجاد کنید و آدرس دقیق فایل g.php
خودتان را جایگزین کنید:

کد دستور:
wget -q https://betalk.ir/sitemap/g.php
اگر در روز مطالب کمی قرار می دهید، می توانید زمان اجرای سایت مپ را روزانه یکبار یا دوبار تنظیم کنید.
3 . ساختن فایل ایندکس سایت مپ
اگر چندین سایت مپ برای مثال یکی برای مطالب، یکی برای برگه و … ساخته باشید، احتمالا به یک Sitemap Index نیاز خواهید داشت! صفحه ای در فرمت XML که تمامی سایت مپ ها را می توانید داخل آن معرفی کنید و با اینکار دیگر نیازی نیست تمامی سایت مپ ها را داخل گوگل کنسول بصورت جداگانه ثبت کنید و فقط کافیست همین ایندکس را به گوگل معرفی کنید تا بطور خودکار سایت مپ های دیگر را شناسایی کند.
برای اینکار، داخل پوشه sitemap خودتان، یک فایل به نام sitemap_index.xml
ایجاد کنید و کدهای زیر را داخل آن قرار دهید:
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex 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/siteindex.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap><loc>https://betalk.ir/sitemap/static/sitemap.xml</loc></sitemap>
<sitemap><loc>https://betalk.ir/sitemap/stats/sitemap.xml</loc></sitemap>
<sitemap><loc>https://betalk.ir/sitemap/blog/sitemap.xml</loc></sitemap>
</sitemapindex>
در خط 4 و 5 و 6 لینک مستقیم سایت مپ هایتان را جایگزین کنید. شما می توانید این خطوط را اضافه یا کم کنید!
اکنون می توانید صفحه ایندکس سایت مپ خود را به آدرس https://betalk.ir/sitemap/sitemap_index.xml
به گوگل کنسول معرفی کنید.
4 . بررسی معتبر بودن سایت مپ های جدید
پس از ساخت سایت مپ، اکنون وقت آن است که سایت مپ هایتان را از نظر ساختار و دستوری کنترل کنید. برای اینکار آدرس سایت مپ هایتان را در فرم موجود در ابزار زیر وارد کنید تا مطمئن شوید نقشه سایت شما معتبر است:
https://www.xml-sitemaps.com/validate-xml-sitemap.html