Traffine I/O

Bahasa Indonesia

2023-05-25

Menentukan Lokasi Output Sitemap dalam next-sitemap

Pengantar

Secara default, next-sitemap menghasilkan file sitemap secara langsung di direktori public/. Ini berarti bahwa lokasi penyimpanan sitemap standar akan berbentuk https://<nama situs web Anda>/sitemap.xml.

Privasi Sitemap

Sitemap dapat berfungsi sebagai peta harta karun bagi web scraper, karena menyediakan daftar lengkap tautan di dalam sebuah situs web. Begitu scraper mengidentifikasi sitemap, mereka dapat mengakses hampir semua halaman situs.

Lokasi sitemap idealnya hanya diketahui oleh mesin telusur seperti Google. Ketika Google mengenali sitemap Anda, visibilitas situs Anda pada mesin telusur lain seperti Yahoo! Japan atau Bing juga meningkat, yang dapat meningkatkan SEO situs Anda. Tidak perlu mengungkapkan lokasi sitemap kepada scraper. Jika dibiarkan secara default, sitemap di /sitemap.xml menjadi undangan terbuka untuk crawling tak terbatas oleh web scraper. Hal ini menekankan pentingnya mengubah lokasi penyimpanan sitemap default untuk mencegah akses mudah oleh scraper.

Mengubah Direktori Sitemap

Dengan perpustakaan next-sitemap, Anda dapat mengubah lokasi penyimpanan sitemap. Hal ini dapat dicapai dengan menentukan outDir dalam file next-sitemap.config.js. Fitur ini memberikan fleksibilitas kepada pengguna untuk menyimpan sitemap di lokasi pilihan mereka.

Sebagai contoh, Anda dapat menentukan outDir dalam file next-sitemap.config.js seperti yang ditunjukkan di bawah ini. Ini akan mengarahkan output sitemap.xml dan robot.txt ke public/my-dir.

next-sitemap.config.js
 /** @type {import('next-sitemap').IConfig} */
 module.exports = {
   siteUrl: 'https://io.traffine.com/',
   generateRobotsTxt: true,
   sitemapSize: 7000,
+  outDir: './public/my-dir'
 };

Petunjuk Salah dalam robots.txt dan sitemap.xml

Masalah yang dihadapi oleh pengguna adalah bahwa robots.txt dan sitemap.xml tidak menunjuk dengan benar ke direktori yang ditentukan di outDir. Mari lihat entri yang dihasilkan:

public/mu-dir/robots.txt
# *
User-agent: *
Allow: /

# Host
Host: https://hoge.jp

# Sitemaps
Sitemap: https://io.traffine.com/sitemap.xml # here is the problem
public/mu-dir/sitemap.xml
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap><loc>https://io.traffine.com/sitemap-0.xml</loc></sitemap>  <!-- Here is the problem -->
</sitemapindex>

Seperti yang terlihat, file-file ini salah menunjuk ke jalur seolah-olah dihasilkan di dalam /public.

Kedua file tersebut seharusnya terlihat seperti ini:

robots.txt
  # *
  User-agent: *
  Allow: /

  # Host
  Host: https://hoge.jp

  # Sitemaps
- Sitemap: https://io.traffine.com/sitemap.xml # Here is the problem
+ Sitemap: https://io.traffine.com/my-dir/sitemap.xml
sitemap.xml
  <?xml version="1.0" encoding="UTF-8"?>
  <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
- <sitemap><loc>https://io.traffine.com/sitemap-0.xml</loc></sitemap>  <!-- Here is the problem -->
+ <sitemap><loc>https://io.traffine.com/my-dir/sitemap-0.xml</loc></sitemap>
  </sitemapindex>

Solusi atas Masalah

Untuk memperbaiki masalah tersebut dengan arah robots.txt dan sitemap.xml, kita dapat menerapkan solusi yang melibatkan pembuatan dan penggunaan file JavaScript.

Pertama, siapkan file JavaScript bernama sitemap-replace.js. Skrip ini akan membaca file robots.txt dan sitemap.xml yang ada, mengganti jalur yang salah dengan yang benar, dan kemudian menulis kembali data yang sudah diperbaiki ke dalam file-file tersebut. Berikut adalah langkah-langkahnya:

sitemap-replace.js
const replaceSitemap = async (fileName) => {
  const fs = require('fs/promises')
  const appRoot = require('app-root-path')
  const subDirectory = 'my-dir' // Change this
  const filePath = `${appRoot}/public/${subDirectory}/${fileName}`

  const original = await fs.readFile(filePath, 'utf8')
  const replacedData = original.replace(
    /https\:\/\/io\.traffine\.com\/sitemap/g, // Change this
    `https://io.traffine.com/${subDirectory}/sitemap` // Change this
  )

  await fs.writeFile(filePath, replacedData, 'utf8')
}

;(async () => {
  await replaceSitemap('robots.txt')
  await replaceSitemap('sitemap.xml')
})()

Selanjutnya, sesuaikan perintah postbuild dalam package.json untuk menjalankan skrip ini setelah perintah next-sitemap. Hal ini memastikan bahwa skrip berjalan setiap kali Anda membangun proyek Anda, sehingga jalur sitemap Anda tetap menunjuk dengan benar ke direktori yang ditentukan.

package.json
 {
 ...

   "build": "next build",
-  "postbuild": "next-sitemap --config next-sitemap.config.js"
+  "postbuild": "next-sitemap --config next-sitemap.config.js && node sitemap-replace.js"

 ...
 }

Setelah menjalankan skrip ini, isi file robots.txt dan sitemap.xml akan diperbarui dengan benar untuk menunjuk ke direktori baru. File-file yang diperbarui akan terlihat seperti ini:

public/my-dir/robots.txt
# *
User-agent: *
Allow: /

# Host
Host: https://io.traffine.com

# Sitemaps
Sitemap: https://io.traffine.com/my-dir/sitemap.xml
sitemap.xml
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap><loc>https://io.traffine.om/my-dir/sitemap-0.xml</loc></sitemap>
</sitemapindex>

Dengan solusi ini, Anda sekarang dapat menjaga privasi lokasi sitemap Anda, sambil memastikan bahwa sitemap tersebut dapat diakses dengan benar oleh mesin telusur.

Referensi

https://github.com/iamvishnusankar/next-sitemap

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!