منظور از نقشه سایت یا سایت مپ (sitemap) در این مطلب یک فایل با فرمت xml است که به موتورهای جستجو فهرستی از لینکهای موجود در سایت ارائه میدهد.
قرارداد یک: موتور جستجو در ادامه مطلب گوگل است ...
قبل از هر چیز باید بدانیم هیچ تضمینی وجود ندارد که گوگل همه لینکهایی که از طریق سایت مپ به آن معرفی میکنیم را ایندکس کند. گوگل روش و الگوریتمهای زیادی برای خزیدن (crawl) در وبسایت ها دارد بنابراین وجود نقشه سایت کمک کننده است اما تضمین کننده نیست!
از نظر گوگل وجود سایت مپ برای سایتهای زیر بسیار ضروری است:
از طریق این لینک میتوانید اطلاعات بیشتری در مورد دلیل اهمیت سایت مپ از دید گوگل به دست آورید.
فرمت نقشه سایت xml است، در این فایل اساسا از <url> جداگانه برای هر صفحه از وبسایت استفاده میشود که در داخل این تگ <loc> به عنوان تگ اصلی و اجباری وجود دارد و حاوی آدرس صفحه است.
همچنین تگهای اختیاری وجود دارد که میتواند دید بهتری به خزنده برای ایندکس کردن صفحه بدهد، که در ادامه به معرفی مهمترین این تگها میپردازم:
شما می توانید در مورد سایر پروتکلهای سایتمپ در sitemaps.org اطلاعات بیشتری کسب کنید.
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc>http://www.example.com/</loc> <lastmod>2021-01-01</lastmod> <changefreq>daily</changefreq> <priority>1</priority> </url> <url> <loc>http://www.example.com/test-2</loc> <lastmod>2021-01-01</lastmod> <changefreq>daily</changefreq> <priority>1</priority> </url> . . . <url> <loc>http://www.example.com/test-n</loc> <lastmod>2021-01-01</lastmod> <changefreq>daily</changefreq> <priority>1</priority> </url> </urlset>
تا اینجا به معرفی سایتمپ پرداختم و در ادامه میخواهم تجربه خود در ساخت سایت مپ در فریم ورک لاراول را با شما به اشتراک بگذارم بنابراین ادامه مطلب بیشتر برای توسعه دهندگان آشنا با php و فریم ورک لاراول مفید است.
اگر شما با mvc و فریم ورک لاراول آشنا هستید میدانید که در قدم اول باید برای سایت مپ وبسایتمان یک Controller بسازیم، دستور ساخت کنترلر این است:
php artisan make:controller SitemapController
با این دستور Controller نقشه سایت ایجاد شده و باید چیزی شبیه به این باشد:
قرارداد دو: ما یک سایت خبری داریم که شامل مقاله (Article)، دسته بندی (Category) و تگ (Tag) است. پس قبلا جدولها و مدلهای مربوطه را ساخته ایم.
حالا با فرض اینکه در پروژه خود سه مدل داریم که برای مقالات، دسته بندیها و تگها ساخته ایم، متدی به نام index برای ساخت سایت مپ اصلی خود به شکل زیر اقدام میکنیم:
public function index() { return response()->view('sitemap.index')->header('Content-Type', 'text/xml'); }
اگر به متد index دقت کرده باشید در خروجی آن یک فایل blade به نام index فراخوانی شده است و ما به این view هیچ دیتایی پاس نداده ایم، دلیل آن این است که صفحه ایندکس سایت مپی که قصد ایجاد آن را داریم داینامیک نیست. حالا باید در مسیر view/sitemap یک فایل به نام index.blade.php بسازیم و کدهای زیر را در آن قرار دهیم:
<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?> <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <sitemap> <loc>{{ url('sitemap.xml/articles') }}</loc> </sitemap> <sitemap> <loc>{{ url('sitemap.xml/categories') }}</loc> </sitemap> <sitemap> <loc>{{ url('sitemap.xml/tags') }}</loc> </sitemap> </sitemapindex>
این کار باعث میشود که ما یک فایل اصلی و ثابت برای سایت مپ خود ساخته باشیم که خزنده گوگل را به سه سایت مپ دیگر راهنمایی کند، یکی برای مقالات، یکی برای دسته بندیها و یکی برای تگها
برای ساخت سایت مپ هر کدام از محتواها باید سه متد جدید به sitemapController اضافه کنیم:
public function articles() { $articles = Article::latest()->get(); return response()->view('sitemap.articles', [ 'articles' => $articles ])->header('Content-Type', 'text/xml'); } public function categories() { $categories = Category::all(); return response()->view('sitemap.categories', [ 'categories' => $categories ])->header('Content-Type', 'text/xml'); } public function tags() { $tags = Tag::all(); return response()->view('sitemap.tags', ['tags' => $tags])->header('Content-Type', 'text/xml'); }
حالا دیگر کار ما با SitemapContrller تمام شده است. نوبت ساخت فایلهای view متناظر فراخوانی شده در هر کدام از متدهاست برای این کار باید در مسیر view/sitemap سه فایل دیگر به نامهای articles.blade.php و categories.blade.php و tags.blade.php بسازیم. محتوای فایلها باید مانند زیر ساخته شود:
<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> @foreach ($articles as $article) <url> <loc>http://project.app:8000/articles/{{ $article->slug }}</loc> <lastmod>{{ $article->created_at->tz('UTC')->toAtomString() }}</lastmod> <changefreq>weekly</changefreq> <priority>0.9</priority> </url> @endforeach </urlset>
کدهای بالا در فایل articles.blade.php قرار میگیرند و به روش مشابه باید ویوهای categories.blade.php و tags.blade.php را بسازیم.
به خاطر داشته باشید که تگهای <lastmod> ، <changefreq> و <priority> اختیاری هستند و تجربه نشان داده است استفاده یا عدم استفاده از آنها تاثیر چندانی روی سئوی سایت شما ندارد. اما بین این سه تگ کارشناسان سئو استفاده از تگ <lastmod> را ضروریتر میدانند.
حالا زمان آن رسیده که مطابق با متدهای تعریف شده در SitemapController فایل web.php خود را باز کرده و مسیرهای جدید را برای نقشه سایت اضافه کنیم:
Route::get('/sitemap.xml', 'SitemapController@index'); Route::get('/sitemap.xml/articles', 'SitemapController@articles'); Route::get('/sitemap.xml/categories', 'SitemapController@categories'); Route::get('/sitemap.xml/questions', 'SitemapController@questions'); Route::get('/sitemap.xml/tags', 'SitemapController@tags');
شما با خواندن این مطلب میتوانید برای وب سایتهایی که با لاراول توسعه داده شده اند به راحتی یک سایت مپ داینامیک توسعه دهید. قطعا راههای دیگر و چه بسا بهتری برای ساخت سایت مپ داینامیک وجود دارد، لطفا شما هم تجربیات خود را در این زمینه با من در میان بگذارید.