احسان رئیسی
احسان رئیسی
خواندن ۵ دقیقه·۳ سال پیش

ساخت سایت مپ داینامیک با لاراول

سایت مپ بهترین راهنمای سایت شما برای خزنده‌های گوگل است!
سایت مپ بهترین راهنمای سایت شما برای خزنده‌های گوگل است!

بخش اول : با سایت مپ آشنا شویم

منظور از نقشه سایت یا سایت مپ (sitemap) در این مطلب یک فایل با فرمت xml است که به موتورهای جستجو فهرستی از لینک‌های موجود در سایت ارائه می‌دهد.

قرارداد یک: موتور جستجو در ادامه مطلب گوگل است ...

قبل از هر چیز باید بدانیم هیچ تضمینی وجود ندارد که گوگل همه لینک‌هایی که از طریق سایت مپ به آن معرفی می‌کنیم را ایندکس کند. گوگل روش و الگوریتم‌های زیادی برای خزیدن (crawl) در وب‌سایت ها دارد بنابراین وجود نقشه سایت کمک کننده است اما تضمین کننده نیست!

چرا سایت مپ مهم است؟

از نظر گوگل وجود سایت مپ برای سایت‌های زیر بسیار ضروری است:

  • وب‌سایت‌های بزرگ که تعداد صفحات و لینک‌های زیادی دارند.
  • وب‌سایت‌هایی که در آنها صفحات به خوبی به یکدیگر پیوند داده نشده باشند.
  • وب‌سایت‌های جدید که لینک‌های خارجی کمی دارند.

از طریق این لینک می‌توانید اطلاعات بیشتری در مورد دلیل اهمیت سایت مپ از دید گوگل به دست آورید.

ساختار نقشه سایت

فرمت نقشه سایت xml است، در این فایل اساسا از <url> جداگانه برای هر صفحه از وب‌سایت استفاده می‌شود که در داخل این تگ <loc> به عنوان تگ اصلی و اجباری وجود دارد و حاوی آدرس صفحه است.

همچنین تگ‌های اختیاری وجود دارد که می‎‌تواند دید بهتری به خزنده برای ایندکس کردن صفحه بدهد، که در ادامه به معرفی مهم‌ترین این تگ‌ها می‌پردازم:

  • تگ <lastmod> که نشان دهنده تاریخ آخرین تغییر است.
  • تگ <changefreq> نشان دهنده نرخ تغییر است (اینکه این صفحه روزانه، هفتگی یا ماهانه تغییر می‌کند).
  • تگ <priority> که نشان دهنده اولویت لینک است و مقداری بین 0 تا 1 می‌گیرد، البته این عدد تاثیری در ایندکس کردن لینک‌ها ندارد و گوگل به آن توجه چندانی نمی‌کند.

شما می توانید در مورد سایر پروتکل‌های سایت‌مپ در sitemaps.org اطلاعات بیشتری کسب کنید.

ساختار نمونه برای فایل sitemap.xml

<?xml version=&quot1.0&quot encoding=&quotUTF-8&quot?> <urlset xmlns=&quothttp://www.sitemaps.org/schemas/sitemap/0.9&quot> <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 و فریم ورک لاراول مفید است.

بخش دوم : با لاراول سایت مپ داینامیک بسازیم

1- ساخت Controller و ایجاد متد index

اگر شما با mvc و فریم ورک لاراول آشنا هستید ‌می‌دانید که در قدم اول باید برای سایت مپ وب‌سایتمان یک Controller بسازیم، دستور ساخت کنترلر این است:

php artisan make:controller SitemapController

با این دستور Controller نقشه سایت ایجاد شده و باید چیزی شبیه به این باشد:

SitemapController
SitemapController
قرارداد دو: ما یک سایت خبری داریم که شامل مقاله (Article)، دسته بندی (Category) و تگ (Tag) است. پس قبلا جدول‌ها و مدل‌های مربوطه را ساخته ایم.

حالا با فرض اینکه در پروژه خود سه مدل داریم که برای مقالات، دسته بندی‌ها و تگ‌ها ساخته ایم، متدی به نام index برای ساخت سایت مپ اصلی خود به شکل زیر اقدام می‌کنیم:

public function index() { return response()->view('sitemap.index')->header('Content-Type', 'text/xml'); }

2- ساخت view ایندکس

اگر به متد index دقت کرده باشید در خروجی آن یک فایل blade به نام index فراخوانی شده است و ما به این view هیچ دیتایی پاس نداده ایم، دلیل آن این است که صفحه ایندکس سایت مپی که قصد ایجاد آن را داریم داینامیک نیست. حالا باید در مسیر view/sitemap یک فایل به نام index.blade.php بسازیم و کدهای زیر را در آن قرار دهیم:

<?php echo '<?xml version=&quot1.0&quot encoding=&quotUTF-8&quot?>'; ?> <sitemapindex xmlns=&quothttp://www.sitemaps.org/schemas/sitemap/0.9&quot> <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>

این کار باعث می‌شود که ما یک فایل اصلی و ثابت برای سایت مپ خود ساخته باشیم که خزنده گوگل را به سه سایت مپ دیگر راهنمایی کند، یکی برای مقالات، یکی برای دسته بندی‌ها و یکی برای تگ‌ها

3- ساخت بخش داینامیک sitemap

برای ساخت سایت مپ هر کدام از محتواها باید سه متد جدید به 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=&quot1.0&quot encoding=&quotUTF-8&quot?>'; ?> <urlset xmlns=&quothttp://www.sitemaps.org/schemas/sitemap/0.9&quot> @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> را ضروری‌تر می‌دانند.

4- ایجاد مسیر برای سایت مپ

حالا زمان آن رسیده که مطابق با متدهای تعریف شده در 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');
شما با خواندن این مطلب می‌توانید برای وب سایت‌هایی که با لاراول توسعه داده شده اند به راحتی یک سایت مپ داینامیک توسعه دهید. قطعا راه‌های دیگر و چه بسا بهتری برای ساخت سایت مپ داینامیک وجود دارد، لطفا شما هم تجربیات خود را در این زمینه با من در میان بگذارید.
سایت مپنقشه سایتلاراول
توسعه دهنده وب، عضو تیم برنامه نویسی دروزا، هم بنیانگذار بادیجیتال
شاید از این پست‌ها خوشتان بیاید