يمكن لهذه الحزمة إنشاء خريطة موقع دون الحاجة إلى إضافة عناوين URL إليها يدويًا. يعمل هذا عن طريق الزحف إلى موقعك بالكامل.
use Spatie Sitemap SitemapGenerator ;
SitemapGenerator:: create ( ' https://example.com ' )-> writeToFile ( $ path );
يمكنك أيضًا إنشاء خريطة الموقع الخاصة بك يدويًا:
use Carbon Carbon ;
use Spatie Sitemap Sitemap ;
use Spatie Sitemap Tags Url ;
Sitemap:: create ()
-> add (Url:: create ( ' /home ' )
-> setLastModificationDate (Carbon:: yesterday ())
-> setChangeFrequency (Url:: CHANGE_FREQUENCY_YEARLY )
-> setPriority ( 0.1 ))
-> add (...)
-> writeToFile ( $ path );
أو يمكنك الحصول على أفضل ما في العالمين من خلال إنشاء خريطة موقع ثم إضافة المزيد من الروابط إليها:
SitemapGenerator:: create ( ' https://example.com ' )
-> getSitemap ()
-> add (Url:: create ( ' /extra-page ' )
-> setLastModificationDate (Carbon:: yesterday ())
-> setChangeFrequency (Url:: CHANGE_FREQUENCY_YEARLY )
-> setPriority ( 0.1 ))
-> add (...)
-> writeToFile ( $ path );
يمكنك أيضًا التحكم في الحد الأقصى لعمق خريطة الموقع:
SitemapGenerator:: create ( ' https://example.com ' )
-> configureCrawler ( function ( Crawler $ crawler ) {
$ crawler -> setMaximumDepth ( 3 );
})
-> writeToFile ( $ path );
يتمتع المولد بالقدرة على تنفيذ JavaScript على كل صفحة، لذا سيتم الزحف أيضًا إلى الروابط التي يتم إدخالها في dom بواسطة JavaScript.
يمكنك أيضًا استخدام أحد أقراص نظام الملفات المتوفرة لكتابة خريطة الموقع إليها.
SitemapGenerator:: create ( ' https://example.com ' )-> getSitemap ()-> writeToDisk ( ' public ' , ' sitemap.xml ' );
قد تحتاج إلى ضبط مستوى رؤية الملف على أحد ملفات Sitemap الخاصة بك. على سبيل المثال، إذا كنت تكتب خريطة موقع إلى S3 فأنت تريد أن تكون متاحة للعامة. يمكنك ضبط المعلمة الثالثة على true
لجعلها عامة. ملاحظة: لا يمكن استخدام هذا إلا في طريقة ->writeToDisk()
.
SitemapGenerator:: create ( ' https://example.com ' )-> getSitemap ()-> writeToDisk ( ' public ' , ' sitemap.xml ' , true );
يمكنك أيضًا إضافة نماذجك مباشرةً عن طريق تنفيذ الواجهة SpatieSitemapContractsSitemapable
.
use Spatie Sitemap Contracts Sitemapable ;
use Spatie Sitemap Tags Url ;
class Post extends Model implements Sitemapable
{
public function toSitemapTag (): Url | string | array
{
// Simple return :
return route ( ' blog.post.show ' , $ this );
// Return with fine - grained control :
return Url:: create ( route ( ' blog.post.show ' , $ this ))
-> setLastModificationDate (Carbon:: create ( $ this -> updated_at ))
-> setChangeFrequency (Url:: CHANGE_FREQUENCY_YEARLY )
-> setPriority ( 0.1 );
}
}
يمكنك الآن إضافة نموذج منشور واحد إلى خريطة الموقع أو حتى مجموعة كاملة.
use Spatie Sitemap Sitemap ;
Sitemap:: create ()
-> add ( $ post )
-> add (Post:: all ());
وبهذه الطريقة يمكنك إضافة جميع صفحاتك بسرعة فائقة دون الحاجة إلى الزحف إليها جميعًا.
نحن نستثمر الكثير من الموارد في إنشاء أفضل الحزم مفتوحة المصدر في فئتها. يمكنك دعمنا عن طريق شراء أحد منتجاتنا المدفوعة.
نحن نقدر بشدة إرسالك لنا بطاقة بريدية من مسقط رأسك، مع ذكر الحزمة (الحزم) التي تستخدمها. ستجد عنواننا على صفحة الاتصال لدينا. ننشر جميع البطاقات البريدية المستلمة على جدار البطاقات البريدية الافتراضية لدينا.
أولاً، قم بتثبيت الحزمة عبر الملحن:
composer require spatie/laravel-sitemap
ستقوم الحزمة بتسجيل نفسها تلقائيًا.
إذا كنت تريد تحديث خريطة الموقع الخاصة بك تلقائيًا وبشكل متكرر، فستحتاج إلى تنفيذ بعض الخطوات الإضافية.
يمكنك تجاوز الخيارات الافتراضية للزاحف. قم أولاً بنشر التكوين:
php artisan vendor:publish --provider= " SpatieSitemapSitemapServiceProvider " --tag=sitemap-config
سيؤدي هذا إلى نسخ التكوين الافتراضي إلى config/sitemap.php
حيث يمكنك تعديله.
use GuzzleHttp RequestOptions ;
use Spatie Sitemap Crawler Profile ;
return [
/ *
* These options will be passed to GuzzleHttp Client when it is created .
* For in - depth information on all options see the Guzzle docs :
*
* http : // docs . guzzlephp . org / en / stable / request - options . html
* /
' guzzle_options ' => [
/ *
* Whether or not cookies are used in a request .
* /
RequestOptions:: COOKIES => true ,
/ *
* The number of seconds to wait while trying to connect to a server .
* Use 0 to wait indefinitely .
* /
RequestOptions:: CONNECT_TIMEOUT => 10 ,
/ *
* The timeout of the request in seconds . Use 0 to wait indefinitely .
* /
RequestOptions:: TIMEOUT => 10 ,
/ *
* Describes the redirect behavior of a request .
* /
RequestOptions:: ALLOW_REDIRECTS => false ,
],
/ *
* The sitemap generator can execute JavaScript on each page so it will
* discover links that are generated by your JS scripts . This feature
* is powered by headless Chrome .
* /
' execute_javascript ' => false ,
/ *
* The package will make an educated guess as to where Google Chrome is installed .
* You can also manually pass it ' s location here .
* /
' chrome_binary_path ' => '' ,
/ *
* The sitemap generator uses a CrawlProfile implementation to determine
* which urls should be crawled for the sitemap .
* /
' crawl_profile ' => Profile::class,
];
أسهل طريقة هي الزحف إلى النطاق المحدد وإنشاء خريطة موقع تحتوي على جميع الروابط الموجودة. يجب تحديد وجهة خريطة الموقع بواسطة $path
.
SitemapGenerator:: create ( ' https://example.com ' )-> writeToFile ( $ path );
ستبدو خريطة الموقع التي تم إنشاؤها مشابهة لما يلي:
<? xml version = " 1.0 " encoding = " UTF-8 " ?>
< urlset xmlns = " http://www.sitemaps.org/schemas/sitemap/0.9 " >
< url >
< loc >https://example.com</ loc >
< lastmod >2016-01-01T00:00:00+00:00</ lastmod >
< changefreq >daily</ changefreq >
< priority >0.8</ priority >
</ url >
< url >
< loc >https://example.com/page</ loc >
< lastmod >2016-01-01T00:00:00+00:00</ lastmod >
< changefreq >daily</ changefreq >
< priority >0.8</ priority >
</ url >
...
</ urlset >
يمكنك إنشاء ملف تعريف زحف مخصص عن طريق تنفيذ واجهة SpatieCrawlerCrawlProfilesCrawlProfile
وعن طريق تخصيص طريقة shouldCrawl()
للتحكم الكامل في عنوان URL/المجال/المجال الفرعي الذي يجب الزحف إليه:
use Spatie Crawler CrawlProfiles CrawlProfile ;
use Psr Http Message UriInterface ;
class CustomCrawlProfile extends CrawlProfile
{
public function shouldCrawl ( UriInterface $ url ): bool
{
if ( $ url -> getHost () !== ' localhost ' ) {
return false ;
}
return $ url -> getPath () === ' / ' ;
}
}
وقم بتسجيل CustomCrawlProfile::class
في config/sitemap.php
.
return [
...
/ *
* The sitemap generator uses a CrawlProfile implementation to determine
* which urls should be crawled for the sitemap .
* /
' crawl_profile ' => CustomCrawlProfile:: class ,
];
لتغيير الوضع lastmod
changefreq
priority
لصفحة الاتصال:
use Carbon Carbon ;
use Spatie Sitemap SitemapGenerator ;
use Spatie Sitemap Tags Url ;
SitemapGenerator:: create ( ' https://example.com ' )
-> hasCrawled ( function ( Url $ url ) {
if ( $ url -> segment ( 1 ) === ' contact ' ) {
$ url -> setPriority ( 0.9 )
-> setLastModificationDate (Carbon:: create ( ' 2016 ' , ' 1 ' , ' 1 ' ));
}
return $ url ;
})
-> writeToFile ( $ sitemapPath );
إذا كنت لا تريد ظهور الرابط الذي تم الزحف إليه في خريطة الموقع، فلا تقم بإعادته إلى العنصر القابل للاستدعاء الذي قمت بتمريره إلى hasCrawled
.
use Spatie Sitemap SitemapGenerator ;
use Spatie Sitemap Tags Url ;
SitemapGenerator:: create ( ' https://example.com ' )
-> hasCrawled ( function ( Url $ url ) {
if ( $ url -> segment ( 1 ) === ' contact ' ) {
return ;
}
return $ url ;
})
-> writeToFile ( $ sitemapPath );
يمكنك أيضًا توجيه الزاحف الأساسي لعدم الزحف إلى بعض الصفحات عن طريق تمرير كائن callable
إلى shouldCrawl
.
ملاحظة: سوف يعمل shouldCrawl
فقط مع Profile
الزحف الافتراضي أو ملفات تعريف الزحف المخصصة التي تطبق أسلوب shouldCrawlCallback
.
use Spatie Sitemap SitemapGenerator ;
use Psr Http Message UriInterface ;
SitemapGenerator:: create ( ' https://example.com ' )
-> shouldCrawl ( function ( UriInterface $ url ) {
// All pages will be crawled , except the contact page .
// Links present on the contact page won ' t be added to the
// sitemap unless they are present on a crawlable page .
return strpos ( $ url -> getPath (), ' /contact ' ) === false ;
})
-> writeToFile ( $ sitemapPath );
يمكن تكوين الزاحف نفسه للقيام ببعض الأشياء المختلفة.
يمكنك تكوين الزاحف الذي يستخدمه منشئ خريطة الموقع، على سبيل المثال: لتجاهل عمليات فحص الروبوت؛ مثل ذلك.
SitemapGenerator:: create ( ' http://localhost:4020 ' )
-> configureCrawler ( function ( Crawler $ crawler ) {
$ crawler -> ignoreRobots ();
})
-> writeToFile ( $ file );
يمكنك تحديد كمية الصفحات التي يتم الزحف إليها عن طريق استدعاء setMaximumCrawlCount
use Spatie Sitemap SitemapGenerator ;
SitemapGenerator:: create ( ' https://example.com ' )
-> setMaximumCrawlCount ( 500 ) // only the 500 first pages will be crawled
. . .
يمكن لمنشئ خريطة الموقع تنفيذ JavaScript على كل صفحة حتى يكتشف الروابط التي تم إنشاؤها بواسطة نصوص JS الخاصة بك. يمكنك تمكين هذه الميزة عن طريق تعيين execute_javascript
في ملف التكوين على true
.
تحت الغطاء، يتم استخدام Chrome بدون رأس لتنفيذ JavaScript. فيما يلي بعض المؤشرات حول كيفية تثبيته على نظامك.
ستقوم الحزمة بتخمين مدروس حول مكان تثبيت Chrome على نظامك. يمكنك أيضًا تمرير موقع برنامج Chrome الثنائي يدويًا executeJavaScript()
.
يمكنك إضافة روابط يدويًا إلى خريطة الموقع:
use Spatie Sitemap SitemapGenerator ;
use Spatie Sitemap Tags Url ;
SitemapGenerator:: create ( ' https://example.com ' )
-> getSitemap ()
// here we add one extra link , but you can add as many as you ' d like
-> add (Url:: create ( ' /extra-page ' )-> setPriority ( 0.5 ))
-> writeToFile ( $ sitemapPath );
قد تحتوي المواقع متعددة اللغات على عدة إصدارات بديلة لنفس الصفحة (واحدة لكل لغة). بناءً على المثال السابق يمكن إضافة بديل كما يلي:
use Spatie Sitemap SitemapGenerator ;
use Spatie Sitemap Tags Url ;
SitemapGenerator:: create ( ' https://example.com ' )
-> getSitemap ()
// here we add one extra link , but you can add as many as you ' d like
-> add (Url:: create ( ' /extra-page ' )-> setPriority ( 0.5 )-> addAlternate ( ' /extra-pagina ' , ' nl ' ))
-> writeToFile ( $ sitemapPath );
لاحظ وظيفة addAlternate
التي تأخذ عنوان URL البديل والإعدادات المحلية التي ينتمي إليها.
يمكن أن تحتوي عناوين URL أيضًا على صور. راجع أيضًا https://developers.google.com/search/docs/advanced/sitemaps/image-sitemaps
use Spatie Sitemap Sitemap ;
use Spatie Sitemap Tags Url ;
Sitemap:: create ()
// here we add an image to a URL
-> add (Url:: create ( ' https://example.com ' )-> addImage ( ' https://example.com/images/home.jpg ' , ' Home page image ' ))
-> writeToFile ( $ sitemapPath );
بالإضافة إلى الصور، يمكن تغليف مقاطع الفيديو بعلامات URL. راجع https://developers.google.com/search/docs/crawling-indexing/sitemaps/video-sitemaps
يمكنك تعيين السمات المطلوبة مثل ذلك:
use Spatie Sitemap Sitemap ;
use Spatie Sitemap Tags Url ;
Sitemap:: create ()
-> add (
Url:: create ( ' https://example.com ' )
-> addVideo ( ' https://example.com/images/thumbnail.jpg ' , ' Video title ' , ' Video Description ' , ' https://example.com/videos/source.mp4 ' , ' https://example.com/video/123 ' )
)
-> writeToFile ( $ sitemapPath );
إذا كنت تريد تمرير المعلمات الاختيارية مثل family_friendly
أو live
أو platform
:
use Spatie Sitemap Sitemap ;
use Spatie Sitemap Tags Url ;
use Spatie Sitemap Tags Video ;
$ options = [ ' family_friendly ' => Video:: OPTION_YES , ' live ' => Video:: OPTION_NO ];
$ allowOptions = [ ' platform ' => Video:: OPTION_PLATFORM_MOBILE ];
$ denyOptions = [ ' restriction ' => ' CA ' ];
Sitemap:: create ()
-> add (
Url:: create ( ' https://example.com ' )
-> addVideo ( ' https://example.com/images/thumbnail.jpg ' , ' Video title ' , ' Video Description ' , ' https://example.com/videos/source.mp4 ' , ' https://example.com/video/123 ' , $ options , $ allowOptions , $ denyOptions )
)
-> writeToFile ( $ sitemapPath );
يمكنك أيضًا إنشاء خريطة موقع يدويًا بالكامل:
use Carbon Carbon ;
Sitemap:: create ()
-> add ( ' /page1 ' )
-> add ( ' /page2 ' )
-> add (Url:: create ( ' /page3 ' )-> setLastModificationDate (Carbon:: create ( ' 2016 ' , ' 1 ' , ' 1 ' )))
-> writeToFile ( $ sitemapPath );
يمكنك إنشاء فهرس خريطة الموقع:
use Spatie Sitemap SitemapIndex ;
SitemapIndex:: create ()
-> add ( ' /pages_sitemap.xml ' )
-> add ( ' /posts_sitemap.xml ' )
-> writeToFile ( $ sitemapIndexPath );
يمكنك تمرير كائن SpatieSitemapTagsSitemap
لتعيين خاصية lastModificationDate
يدويًا.
use Spatie Sitemap SitemapIndex ;
use Spatie Sitemap Tags Sitemap ;
SitemapIndex:: create ()
-> add ( ' /pages_sitemap.xml ' )
-> add (Sitemap:: create ( ' /posts_sitemap.xml ' )
-> setLastModificationDate (Carbon:: yesterday ()))
-> writeToFile ( $ sitemapIndexPath );
سيبدو فهرس خريطة الموقع الذي تم إنشاؤه مشابهًا لما يلي:
<? xml version = " 1.0 " encoding = " UTF-8 " ?>
< sitemapindex xmlns = " http://www.sitemaps.org/schemas/sitemap/0.9 " >
< sitemap >
< loc >http://www.example.com/pages_sitemap.xml</ loc >
< lastmod >2016-01-01T00:00:00+00:00</ lastmod >
</ sitemap >
< sitemap >
< loc >http://www.example.com/posts_sitemap.xml</ loc >
< lastmod >2015-12-31T00:00:00+00:00</ lastmod >
</ sitemap >
</ sitemapindex >
يمكنك استدعاء الأسلوب maxTagsPerSitemap
لإنشاء خريطة موقع تحتوي فقط على الكمية المحددة من العلامات
use Spatie Sitemap SitemapGenerator ;
SitemapGenerator:: create ( ' https://example.com ' )
-> maxTagsPerSitemap ( 20000 )
-> writeToFile ( public_path ( ' sitemap.xml ' ));
من المحتمل أن يتم تحديث موقعك من وقت لآخر. لكي تسمح لخريطة الموقع الخاصة بك أن تعكس هذه التغييرات، يمكنك تشغيل المولد بشكل دوري. أسهل طريقة للقيام بذلك هي الاستفادة من إمكانيات الجدولة الافتراضية في Laravel.
يمكنك إعداد أمر حرفي يشبه إلى حد كبير هذا الأمر:
namespace App Console Commands ;
use Illuminate Console Command ;
use Spatie Sitemap SitemapGenerator ;
class GenerateSitemap extends Command
{
/ * *
* The console command name .
*
* @ var string
* /
protected $ signature = ' sitemap:generate ' ;
/ * *
* The console command description .
*
* @ var string
* /
protected $ description = ' Generate the sitemap. ' ;
/ * *
* Execute the console command .
*
* @ return mixed
* /
public function handle ()
{
// modify this to your own needs
SitemapGenerator:: create ( config ( ' app.url ' ))
-> writeToFile ( public_path ( ' sitemap.xml ' ));
}
}
يجب بعد ذلك جدولة هذا الأمر في kernel وحدة التحكم.
// app / Console / Kernel . php
protected function schedule ( Schedule $ schedule )
{
. . .
$ schedule -> command ( ' sitemap:generate ' )-> daily ();
. . .
}
الرجاء مراجعة سجل التغيير لمزيد من المعلومات عما تغير مؤخرًا.
قم أولاً بتشغيل خادم الاختبار في جلسة طرفية منفصلة:
cd tests/server
./start_server.sh
مع تشغيل الخادم يمكنك تنفيذ الاختبارات:
$ composer test
يرجى الاطلاع على المساهمة للحصول على التفاصيل.
إذا وجدت خطأً يتعلق بالأمان، فيرجى إرسال بريد إلكتروني إلى العنوان [email protected] بدلاً من استخدام أداة تعقب المشكلات.
Spatie هي وكالة تصميم مواقع الإنترنت مقرها في أنتويرب، بلجيكا. ستجد نظرة عامة على جميع مشاريعنا مفتوحة المصدر على موقعنا.
هل يعتمد عملك على مساهماتنا؟ تواصل معنا وادعمنا على Patreon. سيتم تخصيص جميع التعهدات لتخصيص القوى العاملة للصيانة والأشياء الرائعة الجديدة.
رخصة معهد ماساتشوستس للتكنولوجيا (MIT). يرجى الاطلاع على ملف الترخيص لمزيد من المعلومات.