يجعل من السهل إضافة بيانات تعريف محرك البحث إلى موقع الويب الخاص بك ASP.NET Core ، مما يتيح لك التركيز على كتابة الرمز الذي تريد كتابته. يوفر ثلاثة أشياء:
<meta> العلامات لم يعد عليك البحث عن تنسيق كل من هذه البروتوكولات المنفصلة ، أو تلوث HTML الخاص بك مع طن من علامات <meta> .
كما يمنحك المرونة لتحديد سلوك كيفية إنشاء هذه الملفات في وقت التشغيل. يعد هذا مفيدًا لأنه يعني أنه يمكنك القيام بأشياء مثل إعلام Bots Engine Bots بعدم الزحف إلى مواقع التطوير والتدريج ، ولكن السماح لهم بفهرسة إصدار الإنتاج ، دون الحاجة إلى كتابة ثلاثة ملفات منفصلة.
أضف الحزمة Winton.AspNetCore.Seo إلى ملف .csproj لمشروعك أو تثبيت باستخدام Nuget Package Manager:
Install-Package Winton.AspNetCore.Seo إضافة الخدمات المطلوبة في ConfigureServices في Startup.cs . على سبيل المثال لاستخدام إعدادات Robots.txt الافتراضية ودون تحديد خريطة Sitemap:
public void ConfigureServices ( IServiceCollection services )
{
services . AddSeoWithDefaultRobots ( ) ;
} أضف الرسم البياني المفتوح المناسب TagHelper إلى ملفات HTML الخاصة بك. على سبيل المثال في _Layout.cshtml :
@using System;
@using Winton.AspNetCore.Seo.HeaderMetadata.OpenGraph
@addTagHelper *, Winton.AspNetCore.Seo
<!DOCTYPE html >
< html >
< head >
< open-graph-article
audio =" @{ new Audio( " http: //example.com") }"
authors=" @{ new List<string> { " http: //example.com/choc13" } }"
description=" Test description "
images ="
@{
new List<Image>
{
new Image( " http: //example.com/img1.jpg") { SecureUrl = " https://example.com/img1.jpg " , Height = 250 },
new Image( "http://example.com/img2.jpg") { SecureUrl = " https://example.com/img2.jpg " , Height = 300, Width = 500 }
};
} "
published-time=" @{ DateTime.UtcNow } "
title =" Test "
>
</ open-graph-article >
</ head >
< body >
</ body >
</ html > يمكن تعريف خريطة Sitemap بطرق مختلفة عند الاتصال إما AddSeoWithDefaultRobots أو AddSeo :
باستخدام مندوب. على سبيل المثال:
services . AddSeoWithDefaultRobots (
options => options . Urls = new List < SitemapUrlOptions >
{
new SitemapUrlOptions
{
Priority = 0.9M ,
RelativeUrl = " test "
}
} ) ; يكون هذا مفيدًا عندما تريد تحديد خريطة موقعك باستخدام الكود والحفاظ على إعدادات Robots.txt الافتراضية (انظر أدناه لمزيد من التفاصيل حول تخصيص خيارات Robots.txt). هناك أيضًا إصدار من المندوب الذي لديه إمكانية الوصول إلى IWebHostEnvironment عندما يعتمد التكوين على البيئة.
من التكوين. على سبيل المثال:
services . AddSeo ( _configuration ) ; يكون هذا مفيدًا عندما تريد وضع خريطة sitemap الخاصة بك في التكوين ، مثل appsettings.json .
يجب أن يحتوي التكوين على قسم به مفتاح "Seo" ، على سبيل المثال:
{
"Seo" : {
"Sitemap" : {
"Urls" : [
{
"Priority" : 0.9 ,
"RelativeUrl" : " /login "
},
{
"Priority" : 0.8 ,
"RelativeUrl" : " /about "
}
]
}
}
}لاحظ أن هذه الطريقة لا تضع أي خيارات افتراضية لـ Robots.txt ، لذلك تحتاج أيضًا إلى تكوين RobotS.Txt كما هو مطلوب في التطبيق الخاص بك.
يمكن تكوين ملف robots.txt بنفس الطريقة التي يتم بها خلاف sitemap. إذا تم تسمية AddSeoWithDefaultRobots ، فسيتم استخدام خيارات Robots.txt الافتراضية التي تطبق السياسة التالية:
ملاحظة: يجدر دائمًا تذكر أن الروبوتات الخبيثة يمكن أن تتجاهل ملف Robots.txt ، لذلك لا ينبغي الاعتماد عليها لإخفاء أي أجزاء حساسة من الموقع.
يتيح لك الاتصال AddSeo بدلاً من ذلك تحديد الخيارات. هناك عدة طرق يمكن تحديدها:
باستخدام مندوب. على سبيل المثال:
public void ConfigureServices ( IServiceCollection services )
{
services . AddSeo (
options =>
{
options . RobotsTxt . AddSitemapUrl = false ;
options . RobotsTxt . UserAgentRecords = new List < UserAgentRecord >
{
new UserAgentRecord
{
Disallow = new List < string > { " /login " } ,
UserAgent = " bing "
}
} ;
} ) ;
} هذا مفيد عندما تريد تحديد robots.txt باستخدام الكود. يمكنك أيضًا تكوين Sitemap في نفس المندوب. هناك أيضًا إصدار من المندوب الذي لديه إمكانية الوصول إلى IWebHostEnvironment عندما يعتمد التكوين على البيئة.
من التكوين. على سبيل المثال:
services . AddSeo ( _configuration ) ; يكون هذا مفيدًا عندما تريد تحديد Robots.txt في التكوين ، مثل appsettings.json .
يجب أن يحتوي التكوين على قسم به مفتاح "Seo" ، على سبيل المثال:
{
"Seo" : {
"RobotsTxt" : {
"AddSitemapUrl" : false ,
"UserAgentRecords" : [
{
"UserAgent" : " bing " ,
"Disallow" : [ " /login " ]
},
{
"UserAgent" : " google " ,
"Disallow" : [ " * " ]
}
]
}
}
}يجب عليك أيضًا تكوين Sitemap عبر config إذا كنت تحتاج إلى خريطة سيتيمي.
يحتوي RobotsTxtOptions على الخصائص التالية:
AddSitemapUrl - يحدد ما إذا كان ينبغي تضمين عنوان URL إلى sitemap في ملف robots.txtUserAgentRecords - مجموعة من سجلات وكيل المستخدم. استخدم هذا لتحديد أجزاء الموقع التي تريد أن يتجاهلها كل روبوت معين. يمكنك تحديد سجل باستخدام وكيل مستخدم Wildcard لتطبيق نفس القواعد على جميع الروبوتات باستخدام * . تتوفر مساعدي علامات ما يلي من هذه المكتبة عند استخدام عبارة استيراد @addTagHelper *, Winton.AspNetCore.Seo :
open-graph-articleopen-graph-bookopen-graph-profileopen-graph-websiteopen-graph-music-albumopen-graph-music-playlistopen-graph-music-radio-stationopen-graph-music-songopen-graph-video-episodeopen-graph-video-movieopen-graph-video-otheropen-graph-video-tv-show من أجل تعيين بعض الخصائص التي تحتوي على أنواع محددة بواسطة هذه المكتبة ، مثل Audio Image ، ستحتاج أيضًا إلى إضافة @using Winton.AspNetCore.Seo.HeaderMetadata.OpenGraph إلى أعلى ملف CSHTML الخاص بك.
ابدأ موقع الويب الخاص بك ويجب أن تكون قادرًا على رؤية الملفات في عناوين URL التالية في المتصفح:
يجب أن يكون هناك أيضًا عدة علامات <meta> في رأس صفحات HTML لموقعك إذا قمت بإضافة أي مساعدين لعلامة الرسم البياني المفتوح.
جميع مساعدي علامة الرسم البياني المفتوح المدرجة أعلاه تمدد فئة OpenGraphTagHelper . لإضافة كائنات الرسم البياني المفتوح الخاص بك ، يمكنك أيضًا تمديد هذه الفئة. ستهتم الفئة الأساسية بتحويل الخصائص في المساعد الخاص بك إلى علامات Meta الرسم البياني المفتوح الصحيحة. يمكنك أيضًا ضبط Behvaiour من كائنك باستخدام OpenGraphPropertyAttribute و OpenGraphNamespaceAttribute في هذه المكتبة. انظر أدناه للحصول على أمثلة.
بشكل افتراضي ، يحدد OpenGraphTagHelper مساحة اسم og لجميع العلامات. لتجاوز هذا للحصول على خصائص على أي كائنات رسم بياني مفتوح مخصص ، فقط أضف OpenGraphNamespaceAttribute إلى فصلك. على سبيل المثال: [OpenGraphNamespaceAttribute("example", "http://example.com/ns#")] .
فيما يلي موجز عن مثال على مساعد علامة الرسم البياني المفتوح المخصص:
[ OpenGraphNamespaceAttribute ( " baz " , " http://baz.com/ns# " ) ]
public sealed class OpenGraphFooTagHelper : OpenGraphTagHelper
{
public OpenGraphFooTagHelper ( )
: base ( " foo " ) // Call the base constructor with the og:type of the custom object
{
}
// Property will render as <meta content="value assigned" property="baz:bar">
public string Bar { get ; set ; }
// Property will render as <meta content="value assigned" property="baz:foo_bar"> for each entry
// The OpenGraphPropetyAttribute can be used to specify the property name explicitly
[ OpenGraphProperty ( Name = " foo_bar " ) ]
public IEnumerable < string > FooBars { get ; }
}لمزيد من الأمثلة ، انظر SRC لكيفية تنفيذ كائنات الرسم البياني المفتوح التي توفرها هذه المكتبة.