چگونه با استفاده از IndexNow برنامه های Next.js خود را سریعتر ایندکس کنیم
Next.js یک فریمورک قدرتمند برای ساخت برنامه های رعد و برق سریع است. با این حال، ایندکس شدن سریع این برنامه ها توسط موتورهای جستجو برای دید و ترافیک بسیار مهم است و متأسفانه، این فوری نیست.
حتی پس از آپلود نقشه سایت، ممکن است هفته ها یا حتی ماه ها طول بکشد تا موتورهای جستجو صفحات شما را بخزند. در واقع، اگر صفحه جدیدی را به روز کرده یا اضافه کرده باشید، ممکن است هفته ها طول بکشد تا موتورهای جستجو متوجه شوند.
پس ، آیا می توانیم بهتر عمل کنیم؟
در این مقاله، یاد خواهید گرفت که چگونه سئوی اپلیکیشن Next.js خود را در موتورهای جستجوی اصلی مانند بینگ، یاهو و غیره با نمایه سازی سریع با استفاده از IndexNow تقویت کنید.
فهرست مطالب
چگونه یک اسکریپت ایجاد کنیم تا همه URL ها را از نقشه سایت خود دریافت کنیم
IndexNow چیست؟
IndexNow پروتکلی است که زمان نمایه سازی را به شدت کاهش می دهد. در اینجا نحوه تعریف آن در وب سایت آنها آمده است:
IndexNow یک راه آسان برای صاحبان وب سایت ها است تا فوراً موتورهای جستجو را از آخرین تغییرات محتوای وب سایت خود مطلع کنند. IndexNow در ساده ترین شکل خود یک پینگ ساده است تا موتورهای جستجو بدانند که URL و محتوای آن اضافه، به روز یا حذف شده است و به موتورهای جستجو اجازه می دهد تا به سرعت این تغییر را در نتایج جستجوی خود منعکس کنند.( منبع: IndexNow Home )
این پروتکلی است که توسط شرکت هایی مانند Bing، Naver، Seznam.cz، Yandex، Yep و دیگران پذیرفته شده است. گوگل تا زمان نگارش این مقاله از این پروتکل پشتیبانی نمی کند.
این به طور بومی در بسیاری از CMS ها مانند Wix ادغام شده است و افزونه های شخص ثالث زیادی برای دیگران مانند دروپال یا وردپرس وجود دارد. با این حال، هیچ پشتیبانی بومی در NextJS وجود ندارد.
چگونه کار می کند؟
هر بار که چیزی را بهروزرسانی میکنید، تنها کاری که باید انجام دهید این است که «پینگ» کنید یا با API آنها تماس بگیرید و آنها را از تغییر مطلع کنید.
هنگامی که این اطلاعات دریافت شد، موتورهای جستجو اکنون می توانند خزیدن این URL ها را بر سایر URL هایی که به طور طبیعی خزیده می شوند، اولویت دهند.
در این راهنما، روند ادغام IndexNow را در برنامه Next.js موجود شما طی می کنیم تا هرگونه تغییر در URL ها توسط موتورهای جستجو ارسال و فهرست شود.
پیش نیازها
یک برنامه Next.js.
یک sitemap.xml برای برنامه Next.js شما.
مراحل سطح بالا
ابتدا باید مالکیت میزبانی را که آدرسهای اینترنتی برای آن ارسال میشود، اثبات کنیم.
یک اسکریپت ساده Node.js ایجاد کنید تا تمام URL ها را از نقشه سایت خود دریافت کنید.
با IndexNow API تماس بگیرید.
نحوه اثبات مالکیت هاست
برای Bing به صفحه IndexNow
بروید. از آنجایی که هیچ ادغام مستقیمی برای Next.js وجود ندارد، به بخش ادغام دستی بروید.
برای ایجاد یک کلید API جدید، روی "Generate" کلیک کنید.
در برنامه Next.js خود، به دایرکتوری عمومی در ریشه خود بروید. تمام محتوای ثابت از طریق این دایرکتوری ارائه می شود. یک فایل جدید ایجاد کنید و این کلید API را ذخیره کنید:
# Assuming API Key is "f34f184d10c049ef99aa7637cdc4ef04". Change according to yourr generated API Key echo "f34f184d10c049ef99aa7637cdc4ef04" > f34f184d10c049ef99aa7637cdc4ef04.txt
برنامه Next.js خود را بسازید و اجرا کنید:
npm run build && npm run start
سپس تأیید کنید که فایل در مسیر /f34f184d10c049ef99aa7637cdc4ef04.txt
شما موجود است.
یعنی، باز کردن https://localhost:3000/f34f184d10c049ef99aa7637cdc4ef04.txt باید با متن "f34f184d10c049ef99aa7637cdc4ef04" در مرورگر شما پاسخ دهد.
بسته به کلید API خود، مقدار کلید بالا را تغییر دهید. این تغییرات را در تولید خود متعهد، فشار دهید و اجرا کنید.
در صورت استقرار موفقیت آمیز، تحلیل کنید که <Your URL>/<API Key>.txt
متن <API Key>
را ارائه می کند. یعنی: <Your URL>/f34f184d10c049ef99aa7637cdc4ef04.txt
باید f34f184d10c049ef99aa7637cdc4ef04
را ارائه دهد.
چگونه یک اسکریپت ایجاد کنیم تا همه URL ها را از نقشه سایت خود دریافت کنیم
ابتدا فایل Node script را ایجاد کنید:
touch lib/indexnow.js
سپس کد زیر را اضافه کنید:
const xml2js = require('xml2js'); // Configuration const sitemapUrl = '<Your URL>/sitemap.xml'; // TODO: Update const host = '<Your URL>'; // TODO: Update const key = '<API Key>'; // TODO: Update const keyLocation = 'https://<Your URL>/<API Key>.txt'; // TODO: Update const modifiedSinceDate = new Date(process.argv[2] || '1970-01-01'); if (isNaN(modifiedSinceDate.getTime())) { console.error('Invalid date provided. Please use format YYYY-MM-DD'); process.exit(1); } function fetchSitemap(url) { return new Promise((resolve, reject) => { https.get(url, (res) => { let data = ''; res.on('data', (chunk) => { data += chunk; }); res.on('end', () => { resolve(data); }); }).on('error', (err) => { reject(err); }); }); } function parseSitemap(xmlData) { return new Promise((resolve, reject) => { xml2js.parseString(xmlData, (err, result) => { if (err) { reject(err); } else { resolve(result); } }); }); } function filterUrlsByDate(sitemap, date) { const urls = sitemap.urlset.url; return urls .filter(url => new Date(url.lastmod[0]) > date) .map(url => url.loc[0]); } async function main() { try { const xmlData = await fetchSitemap(sitemapUrl); const sitemap = await parseSitemap(xmlData); const filteredUrls = filterUrlsByDate(sitemap, modifiedSinceDate); console.log(filteredUrls); } catch (error) { console.error('An error occurred:', error); } } main();
ما اساسا URL هایی را از نقشه سایت دریافت می کنیم که از تاریخ خاصی تغییر یافته اند. تاریخ را می توان به عنوان یک استدلال به اسکریپت منتقل کرد.
سپس، کتابخانه xml2js
را نصب کنید که از آن برای تجزیه پاسخ XML از نقشه سایت استفاده می کنیم.
npm install xml2js --save-dev
سپس اسکریپت را برای واکشی URL ها اجرا کنید و تحلیل کنید که آیا همه چیز کار می کند یا خیر:
node lib/indexnow.js 2024-01-01
این باید فهرستی از نشانیهای وب را که از 1 ژانویه 2024 تغییر کردهاند، ارائه دهد. میتوانید هر تاریخی را به آن ارسال کنید.
نحوه فراخوانی IndexNow API
در اینجا طرحواره API IndexNow آمده است:
درخواست:
POST /IndexNow HTTP/1.1 Content-Type: application/json; charset=utf-8 Host: api.indexnow.org { "host": "www.example.org", "key": "7e3f6e8bc47b4f2380ba54aab6088521", "keyLocation": "https://www.example.org/7e3f6e8bc47b4f2380ba54aab6088521.txt", "urlList": [ "https://www.example.org/url1", "https://www.example.org/folder/url2", "https://www.example.org/url3" ] }
واکنش:
کد HTTP | واکنش | دلایل |
---|---|---|
200 | خوب | URL با موفقیت ارسال شد |
400 | درخواست بد | قالب نامعتبر است |
403 | ممنوع | در صورت نامعتبر بودن کلید (به عنوان مثال، کلید پیدا نشد، فایل پیدا شد اما کلید در فایل نیست) |
422 | موجودیت غیر قابل پردازش | در صورتی که URL ها متعلق به میزبان نیستند یا کلید با طرحواره موجود در پروتکل مطابقت ندارد |
429 | درخواست های خیلی زیاد | درخواست های بسیار زیاد (هرزنامه احتمالی) |
اکنون که مطمئن شدیم بخش واکشی URL ما به درستی کار می کند، اجازه دهید تابع اصلی را برای فراخوانی IndexNow API اضافه کنیم:
فایل lib/index.js
را با استفاده از IDE مورد علاقه خود باز کنید و تابع زیر را اضافه کنید:
function postToIndexNow(urlList) { const data = JSON.stringify({ host, key, keyLocation, urlList }); const options = { hostname: 'api.indexnow.org', port: 443, path: '/IndexNow', method: 'POST', headers: { 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': data.length } }; return new Promise((resolve, reject) => { const req = https.request(options, (res) => { let responseData = ''; res.on('data', (chunk) => { responseData += chunk; }); res.on('end', () => { resolve({ statusCode: res.statusCode, statusMessage: res.statusMessage, data: responseData }); }); }); req.on('error', (error) => { reject(error); }); req.write(data); req.end(); }); }
این تابع با ارسال فهرستی از URLهایی که به آن ارسال می شود، همراه با <API Key>
با IndexNow API تماس می گیرد.
این تابع را از تابع main فراخوانی کنید. تابع اصلی را به صورت زیر تغییر دهید:
async function main() { try { const xmlData = await fetchSitemap(sitemapUrl); const sitemap = await parseSitemap(xmlData); const filteredUrls = filterUrlsByDate(sitemap, modifiedSinceDate); console.log(filteredUrls); if (filteredUrls.length > 0) { const response = await postToIndexNow(filteredUrls); console.log('IndexNow API Response:'); console.log('Status:', response.statusCode, response.statusMessage); console.log('Data:', response.data); } else { console.log('No URLs modified since the specified date.'); } } catch (error) { console.error('An error occurred:', error); } }
IndexNow API
اکنون برای هر URL که به آن ارسال می کنیم فراخوانی می شود.
اسکریپت را اجرا کنید و در صورت موفقیت یک خروجی مشابه یا در صورت بروز هر مشکلی یک پیام خطا مشاهده خواهید کرد:
% node lib/indexnow.js 2024-07-24 [ 'https://<Your URL>', 'https://<Your URL>/page1', 'https://<Your URL>/page1' ] IndexNow API Response: Status: 200 OK Data:
Voila، API های شما اکنون می توانند برای نمایه سازی سریعتر با IndexNow کار کنند.
گام ها و پیشرفت های بعدی
ما فقط به نحوه نوشتن و اجرای یک اسکریپت به صورت محلی برای ایندکس کردن صفحات خود از طریق IndexNow نگاه کردیم. با این حال، کارهای زیادی وجود دارد که می توان برای بهبود بیشتر این موضوع انجام داد، به عنوان مثال:
IndexNow را برای بهروزرسانی خودکار در خط لوله CI/CD خود ادغام کنید.
نقشه های سایت بزرگ را با دسته بندی یا صف بندی به طور موثر مدیریت کنید.
موارد ارسالی IndexNow را برای اشکال زدایی و تجزیه و تحلیل نظارت و ثبت کنید.
IndexNow API را برای عملکردهای اضافی کاوش کنید (به عنوان مثال: حذف URL).
نسخه CLI را ارائه دهید.
پشتیبانی TypeScript را اضافه کنید.
با این حال، این موارد خارج از محدوده این مقاله است. تعداد کمی از ماژولهای آماده تولید npm وجود دارند که برخی یا بیشتر از این رفتارهای پیشرفته را اجرا میکنند که میتوانند به راحتی در برنامه شما ادغام شوند. من یکی را ایجاد کرده ام ( به اطلاعیه indexnow-submitter مراجعه کنید ) و همچنین ویژگی ها/پشتیبانی از دست رفته را در اکوسیستم اضافه کرده ام. شما می توانید هر یک از این ماژول ها را در برنامه های مبتنی بر Node خود وصل کنید و از آنها استفاده کنید.
نتیجه
در این مقاله یاد گرفتید که چگونه پروتکل IndexNow
را به برنامه Next.js خود اضافه کنید. میتوانید هر زمان که تغییری در وبسایت خود ایجاد میکنید، از این پروتکل استفاده کنید تا تجربه فهرستسازی صفحات بسیار سریعتر، خودکار و راحتتری داشته باشید و به موتورهای جستجو اجازه دهید آخرین مطالب را از صفحات شما دریافت کنند.
امیدوارم مفید بوده باشد، و با خیال راحت این ادغام را برای مطابقت با نیازهای خود بیشتر آزمایش و سفارشی کنید.
ارسال نظر