Cara Menambahkan Fungsi IndexNow Bing pada Website TanStack Start
IndexNow ini semacam alat yang bisa kita gunakan supaya konten baru seperti artikel pada website kita bisa terindeks lebih cepat. Dalam contoh kasus kali ini sebenarnya saya akan mengaktifkan bagian indexnow yang tersedia pada halaman bing webmaster.
Sebelum membuat mempraktikan cara ini, saya asumsikan bahwa Anda sudah mendapatkan semacam kode hash yang didapat pada menu IndexNow Bing Webmaster, lalu juga website TanStack start Anda sudah memiliki sitemap yang tentunya akan kita kirim ke index now.
Berikut ini adalah langkah - langkah instalasi ataupun Cara Menambahkan Fungsi IndexNow Bing pada Website TanStack Start
1. Persiapan
npm install xml2js --save-dev2. Buat Script Untuk Kirim Sitemap
src\lib\indexnow.js
import https from 'node:https';
import xml2js from 'xml2js';
// Configuration
const sitemapUrl = 'https://example.com/sitemap.xml';
const host = 'example.com';
// Ganti dengan IndexNow key milik Anda
const key = 'YOUR_INDEXNOW_KEY';
// Lokasi file verifikasi key yang dapat diakses publik
const keyLocation = `https://example.com/${key}.txt`;
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) => {
const request = https.get(url, (res) => {
if (
res.statusCode >= 300 &&
res.statusCode < 400 &&
res.headers.location
) {
return resolve(
fetchSitemap(res.headers.location)
);
}
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
resolve(data.trim());
});
});
request.on('error', reject);
});
}
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) =>
url.lastmod &&
new Date(url.lastmod[0]) > date
)
.map((url) => url.loc[0]);
}
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', reject);
req.write(data);
req.end();
});
}
async function main() {
try {
const xmlData = await fetchSitemap(
sitemapUrl
);
const sitemap = await parseSitemap(
xmlData
);
const filteredUrls =
filterUrlsByDate(
sitemap,
modifiedSinceDate
);
if (filteredUrls.length === 0) {
console.log(
'No URLs modified since the specified date.'
);
return;
}
console.log(
'URLs to submit:',
filteredUrls
);
console.log(
'Submitting URLs to IndexNow...'
);
const response =
await postToIndexNow(filteredUrls);
console.log('IndexNow API Response:');
console.log(
'Status:',
response.statusCode,
response.statusMessage
);
console.log(
'Data:',
response.data
);
} catch (error) {
console.error(
'An error occurred:',
error
);
}
}
main();
3. Eksekusi Script
Selanjutnya pada terminal silahkan ketikan perintah berikut :
node src/lib/indexnow.js 2024-01-01Jika berhasil maka nanti kurang lebih akan ada pesan sukses sbb :
Catatan :
Jika pada halaman indexnow bing belum muncul maka silahkan tunggu saja 1 x 24 jam, tapi jika dihari berikutnya masih belum muncul silahkan kirim ulang, dalam kasus saya biasanya akan langsung terkirim dan halaman indexnow bing webmaster akan menampilkannya