{"id":33457,"date":"2025-11-03T03:40:56","date_gmt":"2025-11-03T00:40:56","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=33457"},"modified":"2025-11-03T03:40:56","modified_gmt":"2025-11-03T00:40:56","slug":"gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/","title":{"rendered":"Gatsby.js Siteleriniz \u0130\u00e7in \u00d6zel Bir Sitemap Nas\u0131l Olu\u015fturulur?"},"content":{"rendered":"<p><body><\/p>\n<h2>Gatsby.js Siteleriniz \u0130\u00e7in \u00d6zel Bir Sitemap Nas\u0131l Olu\u015fturulur?<\/h2>\n<p>Web sitenizin arama motorlar\u0131 taraf\u0131ndan do\u011fru ve eksiksiz bir \u015fekilde taranmas\u0131, dijital varl\u0131\u011f\u0131n\u0131z\u0131n ba\u015far\u0131s\u0131 i\u00e7in kritik \u00f6neme sahiptir. Bu s\u00fcrecin temel ta\u015flar\u0131ndan biri de sitemap&#8217;lerdir. \u00d6zellikle Gatsby.js gibi modern, performans odakl\u0131 bir statik site jenerat\u00f6r\u00fc kullan\u0131yorsan\u0131z, sitenizin dinamik yap\u0131s\u0131 ve veri kaynaklar\u0131n\u0131n \u00e7e\u015fitlili\u011fi g\u00f6z \u00f6n\u00fcne al\u0131nd\u0131\u011f\u0131nda, \u00f6zel bir sitemap olu\u015fturmak hem bir gereklilik hem de g\u00fc\u00e7l\u00fc bir SEO stratejisinin par\u00e7as\u0131d\u0131r. Bu makalede, Gatsby.js siteniz i\u00e7in \u00f6zel bir sitemap&#8217;i ad\u0131m ad\u0131m nas\u0131l olu\u015fturaca\u011f\u0131n\u0131z\u0131, farkl\u0131 veri kaynaklar\u0131n\u0131 nas\u0131l entegre edece\u011finizi ve arama motorlar\u0131na nas\u0131l bildirece\u011finizi detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<h3>Giri\u015f: Sitemap Nedir ve Neden \u00d6nemlidir?<\/h3>\n<p>Sitemap, web sitenizdeki sayfalar\u0131n, videolar\u0131n ve di\u011fer dosyalar\u0131n bir listesini i\u00e7eren bir dosyad\u0131r ve arama motorlar\u0131na sitenizin organizasyonu hakk\u0131nda bilgi verir. Temel olarak, bir sitemap arama motoru botlar\u0131n\u0131n sitenizdeki t\u00fcm \u00f6nemli sayfalar\u0131 bulmas\u0131na ve taramas\u0131na yard\u0131mc\u0131 olan bir yol haritas\u0131d\u0131r.<\/p>\n<h4>Sitemap&#8217;in SEO \u0130\u00e7in \u00d6nemi<\/h4>\n<p>*   <strong>Yeni Sayfalar\u0131n Ke\u015ffi:<\/strong> \u00d6zellikle yeni bir siteye sahipseniz veya sitenize s\u0131k s\u0131k yeni sayfalar ekliyorsan\u0131z, sitemap arama motorlar\u0131n\u0131n bu yeni i\u00e7erikleri daha h\u0131zl\u0131 bulmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong>\u0130\u00e7erik Hiyerar\u015fisi:<\/strong> Sitemap, sitenizin yap\u0131s\u0131 hakk\u0131nda bilgi vererek, hangi sayfalar\u0131n daha \u00f6nemli oldu\u011funu (\u00f6ncelik) ve ne s\u0131kl\u0131kla g\u00fcncellendi\u011fini (de\u011fi\u015fim s\u0131kl\u0131\u011f\u0131) arama motorlar\u0131na iletmenize olanak tan\u0131r.<br \/>\n*   <strong>Taranma B\u00fct\u00e7esi Optimizasyonu:<\/strong> B\u00fcy\u00fck sitelerde, arama motorlar\u0131 sitenizin t\u00fcm sayfalar\u0131n\u0131 her zaman tarayamaz. Sitemap, arama motorlar\u0131n\u0131n taranma b\u00fct\u00e7esini en verimli \u015fekilde kullanmas\u0131na yard\u0131mc\u0131 olur ve \u00f6nemli sayfalar\u0131n atlanmamas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong>Medya \u0130\u00e7eriklerinin Taranmas\u0131:<\/strong> Geleneksel HTML sitemap&#8217;lerinin yan\u0131 s\u0131ra, video ve g\u00f6rsel sitemap&#8217;leri de arama motorlar\u0131n\u0131n bu t\u00fcr i\u00e7erikleri daha iyi anlamas\u0131na ve dizine eklemesine yard\u0131mc\u0131 olur.<br \/>\n*   <strong>Hata Tespit ve \u00c7\u00f6z\u00fcm\u00fc:<\/strong> Google Search Console gibi ara\u00e7lar arac\u0131l\u0131\u011f\u0131yla sitemap&#8217;inizi izleyerek, taranma hatalar\u0131n\u0131 veya eksik sayfalar\u0131 tespit edebilir ve h\u0131zla d\u00fczeltebilirsiniz.<\/p>\n<h4>Gatsby ve Sitemap \u0130li\u015fkisi<\/h4>\n<p>Gatsby.js, verileri farkl\u0131 kaynaklardan (Markdown dosyalar\u0131, headless CMS&#8217;ler, API&#8217;ler vb.) \u00e7ekerek statik HTML sayfalar\u0131 olu\u015fturan g\u00fc\u00e7l\u00fc bir framework&#8217;t\u00fcr. Bu statik yap\u0131, h\u0131zl\u0131 y\u00fckleme s\u00fcreleri ve y\u00fcksek performans sunarken, sitemap olu\u015fturma s\u00fcrecini de biraz farkl\u0131 bir yakla\u015f\u0131mla ele almay\u0131 gerektirir. Geleneksel bir dinamik web sitesinde sitemap genellikle bir veritaban\u0131 sorgusuyla an\u0131nda olu\u015fturulurken, Gatsby&#8217;de bu s\u00fcre\u00e7 derleme zaman\u0131nda (build time) ger\u00e7ekle\u015fir. Bu, sitemap&#8217;inizin siteniz da\u011f\u0131t\u0131lmadan \u00f6nce tamamen olu\u015fturuldu\u011fu ve optimize edildi\u011fi anlam\u0131na gelir. Gatsby&#8217;nin mod\u00fcler yap\u0131s\u0131 sayesinde, sitemap olu\u015fturma i\u015flemi i\u00e7in \u00f6zel olarak tasarlanm\u0131\u015f eklentileri kullanarak bu s\u00fcreci kolayca otomatikle\u015ftirebilir ve \u00f6zelle\u015ftirebiliriz.<\/p>\n<h3>Gatsby&#8217;de Sitemap Olu\u015fturman\u0131n Temel Y\u00f6ntemleri<\/h3>\n<p>Gatsby siteniz i\u00e7in sitemap olu\u015fturman\u0131n birka\u00e7 temel y\u00f6ntemi vard\u0131r, ancak en yayg\u0131n ve \u00f6nerilen yol, Gatsby&#8217;nin zengin eklenti ekosisteminden faydalanmakt\u0131r.<\/p>\n<h4><code>gatsby-plugin-sitemap<\/code> Kullan\u0131m\u0131<\/h4>\n<p>Bu, Gatsby siteleri i\u00e7in sitemap olu\u015fturman\u0131n standart ve en etkili yoludur. Eklenti, sitenizin GraphQL katman\u0131ndan sayfa verilerini \u00e7ekerek otomatik olarak bir <code>sitemap.xml<\/code> dosyas\u0131 olu\u015fturur. \u00c7o\u011fu senaryo i\u00e7in yeterli esnekli\u011fi ve \u00f6zelle\u015ftirme se\u00e7eneklerini sunar.<\/p>\n<h4>Manuel Sitemap Olu\u015fturma (Daha Az Tercih Edilen)<\/h4>\n<p>\u00c7ok \u00f6zel ve nadir durumlar d\u0131\u015f\u0131nda manuel sitemap olu\u015fturmak genellikle \u00f6nerilmez. Bu y\u00f6ntem, her sayfa i\u00e7in XML girdilerini elle yazmay\u0131 veya \u00f6zel bir Node.js beti\u011fi ile olu\u015fturmay\u0131 gerektirir. Bak\u0131m\u0131 zordur ve siteniz b\u00fcy\u00fcd\u00fck\u00e7e veya de\u011fi\u015ftik\u00e7e h\u0131zla g\u00fcncelli\u011fini yitirebilir. Ancak, <code>gatsby-plugin-sitemap<\/code>&#8216;in sundu\u011fu esnekli\u011fin yetersiz kald\u0131\u011f\u0131 \u00e7ok spesifik bir ihtiyac\u0131n\u0131z varsa d\u00fc\u015f\u00fcn\u00fclebilir.<\/p>\n<h4>Dinamik Sitemap Olu\u015fturma (Veri Kaynaklar\u0131ndan \u00c7ekilen \u0130\u00e7erikler \u0130\u00e7in)<\/h4>\n<p>Gatsby&#8217;nin en g\u00fc\u00e7l\u00fc yanlar\u0131ndan biri, farkl\u0131 veri kaynaklar\u0131ndan (Contentful, Sanity, WordPress REST API&#8217;si, lokal Markdown dosyalar\u0131 vb.) i\u00e7erik \u00e7ekebilmesidir. <code>gatsby-plugin-sitemap<\/code> bu dinamik verilerle olu\u015fturulan sayfalar\u0131 da otomatik olarak alg\u0131layabilir ve sitemap&#8217;e dahil edebilir. \u00d6nemli olan, bu sayfalar\u0131n Gatsby&#8217;nin <code>createPages<\/code> API&#8217;si arac\u0131l\u0131\u011f\u0131yla derleme zaman\u0131nda olu\u015fturulmu\u015f olmas\u0131d\u0131r. Eklenti, GraphQL sorgusu arac\u0131l\u0131\u011f\u0131yla bu sayfalar\u0131n URL&#8217;lerini ve di\u011fer meta verilerini \u00e7ekerek sitemap&#8217;e ekler.<\/p>\n<h3><code>gatsby-plugin-sitemap<\/code> ile Otomatik Sitemap Olu\u015fturma<\/h3>\n<p><code>gatsby-plugin-sitemap<\/code>, Gatsby siteniz i\u00e7in bir sitemap olu\u015fturman\u0131n en kolay ve en g\u00fc\u00e7l\u00fc yoludur. Bu eklenti, sitenizin derleme zaman\u0131nda (build time) t\u00fcm sayfalar\u0131n\u0131z\u0131 tarar ve XML format\u0131nda bir sitemap dosyas\u0131 olu\u015fturur.<\/p>\n<h4>Kurulum<\/h4>\n<p>\u0130lk ad\u0131m olarak, eklentiyi projenize y\u00fcklemeniz gerekir:<\/p>\n<pre><code class=\"language-bash\">npm install gatsby-plugin-sitemap\n<h2>veya<\/h2>\nyarn add gatsby-plugin-sitemap<\/code><\/pre>\n<h4>Yap\u0131land\u0131rma (<code>gatsby-config.js<\/code>)<\/h4>\n<p>Eklentiyi y\u00fckledikten sonra, <code>gatsby-config.js<\/code> dosyan\u0131zda yap\u0131land\u0131rman\u0131z gerekir. En temel yap\u0131land\u0131rma a\u015fa\u011f\u0131daki gibidir:<\/p>\n<pre><code class=\"language-javascript\">\/\/ gatsby-config.js\nmodule.exports = {\n  siteMetadata: {\n    siteUrl: <code>https:\/\/www.example.com<\/code>, \/\/ Kendi site URL'nizi buraya yaz\u0131n\n  },\n  plugins: [\n    <code>gatsby-plugin-sitemap<\/code>,\n  ],\n};<\/code><\/pre>\n<p><strong><code>siteMetadata.siteUrl<\/code>:<\/strong> Bu alan kritik \u00f6neme sahiptir. <code>gatsby-plugin-sitemap<\/code>, sitemap&#8217;teki her URL&#8217;nin tam yolunu olu\u015fturmak i\u00e7in bu de\u011feri kullan\u0131r. E\u011fer bu de\u011fer do\u011fru ayarlanmazsa, sitemap&#8217;inizdeki URL&#8217;ler ge\u00e7ersiz olacakt\u0131r. Genellikle <code>https:\/\/www.yourdomain.com<\/code> \u015feklinde, protokol ve domain ad\u0131 ile birlikte tam URL&#8217;yi belirtmelisiniz.<\/p>\n<p><strong><code>query<\/code> Kullan\u0131m\u0131:<\/strong> Eklenti, varsay\u0131lan olarak Gatsby&#8217;nin dahili <code>allSitePage<\/code> GraphQL sorgusunu kullanarak t\u00fcm sayfalar\u0131 \u00e7eker. Ancak, e\u011fer sitenizdeki sayfalar\u0131n <code>changefreq<\/code>, <code>priority<\/code> veya <code>lastmod<\/code> gibi \u00f6zel alanlara sahip olmas\u0131n\u0131 istiyorsan\u0131z veya belirli veri kaynaklar\u0131ndan gelen sayfalar\u0131 sitemap&#8217;e dahil etmek istiyorsan\u0131z, kendi GraphQL sorgunuzu tan\u0131mlayabilirsiniz.<\/p>\n<p>A\u015fa\u011f\u0131daki \u00f6rnekte, sitenizdeki t\u00fcm sayfalar\u0131 ve Markdown (veya MDX) ile olu\u015fturulmu\u015f blog yaz\u0131lar\u0131n\u0131 i\u00e7eren bir sitemap nas\u0131l olu\u015fturulur g\u00f6sterilmektedir:<\/p>\n<pre><code class=\"language-javascript\">\/\/ gatsby-config.js\nmodule.exports = {\n  siteMetadata: {\n    siteUrl: <code>https:\/\/www.example.com<\/code>,\n  },\n  plugins: [\n    {\n      resolve: <code>gatsby-plugin-sitemap<\/code>,\n      options: {\n        query: <code>\n          {\n            site {\n              siteMetadata {\n                siteUrl\n              }\n            }\n            allSitePage {\n              nodes {\n                path\n              }\n            }\n            allMarkdownRemark { \/\/ E\u011fer Markdown dosyalar\u0131n\u0131z varsa\n              nodes {\n                fields {\n                  slug\n                }\n                frontmatter {\n                  date \/\/ lastmod i\u00e7in kullan\u0131labilir\n                }\n              }\n            }\n            # E\u011fer Contentful gibi ba\u015fka bir kaynaktan veri \u00e7ekiyorsan\u0131z\n            # allContentfulBlogPost {\n            #   nodes {\n            #     slug\n            #     updatedAt \/\/ lastmod i\u00e7in kullan\u0131labilir\n            #   }\n            # }\n          }\n        <\/code>,\n        resolveSiteUrl: () => 'https:\/\/www.example.com', \/\/ siteMetadata'dan da \u00e7ekilebilir\n        resolvePages: ({\n          allSitePage: { nodes: allPages },\n          allMarkdownRemark: { nodes: allMarkdownPages },\n          \/\/ allContentfulBlogPost: { nodes: allContentfulPosts },\n        }) => {\n          const pages = allPages.map(page => {\n            return { ...page };\n          });\n\n          const markdownPages = allMarkdownPages.map(page => {\n            return {\n              path: page.fields.slug, \/\/ Kendi slug alan\u0131n\u0131z\u0131 buraya yaz\u0131n\n              lastmod: page.frontmatter.date, \/\/ Son g\u00fcncelleme tarihi\n              changefreq: <code>weekly<\/code>,\n              priority: 0.7,\n            };\n          });\n\n          \/\/ const contentfulPosts = allContentfulPosts.map(post => {\n          \/\/   return {\n          \/\/     path: <code>\/blog\/${post.slug}<\/code>,\n          \/\/     lastmod: post.updatedAt,\n          \/\/     changefreq: <code>daily<\/code>,\n          \/\/     priority: 0.8,\n          \/\/   };\n          \/\/ });\n\n          return [...pages, ...markdownPages \/<em>, ...contentfulPosts <\/em>\/];\n        },\n        serialize: ({ path, lastmod, changefreq, priority }) => {\n          return {\n            url: path,\n            lastmod,\n            changefreq,\n            priority,\n          };\n        },\n        \/\/ Hari\u00e7 tutulacak sayfalar\n        exclude: [\"\/dev-404-page\/\", \"\/404\/\", \"\/404.html\", \"\/offline-plugin-app-shell-fallback\/\", \"\/_dsg\/\"],\n        output: \"\/sitemap.xml\", \/\/ Sitemap dosyas\u0131n\u0131n kaydedilece\u011fi yol\n        createLinkInHead: true, \/\/ HTML head'e sitemap linki ekler\n      },\n    },\n  ],\n};<\/code><\/pre>\n<p><strong><code>resolveSiteUrl<\/code>:<\/strong> Bu fonksiyon, <code>siteMetadata.siteUrl<\/code>&#8216;dan farkl\u0131 bir URL kullanmak isterseniz veya karma\u015f\u0131k bir mant\u0131kla site URL&#8217;sini belirlemeniz gerekirse kullan\u0131\u015fl\u0131d\u0131r. \u00c7o\u011fu durumda, <code>siteMetadata<\/code>&#8216;dan \u00e7ekmek yeterlidir.<\/p>\n<p><strong><code>resolvePages<\/code>:<\/strong> Bu fonksiyon, GraphQL sorgunuzdan gelen verileri i\u015fleyerek sitemap&#8217;e dahil edilecek sayfa nesneleri dizisini d\u00f6nd\u00fcr\u00fcr. Burada, farkl\u0131 veri kaynaklar\u0131ndan gelen sayfalar\u0131 birle\u015ftirebilir ve her sayfa i\u00e7in \u00f6zel <code>path<\/code>, <code>lastmod<\/code>, <code>changefreq<\/code> ve <code>priority<\/code> de\u011ferlerini belirleyebilirsiniz.<\/p>\n<p><strong><code>serialize<\/code>:<\/strong> <code>resolvePages<\/code> taraf\u0131ndan d\u00f6nd\u00fcr\u00fclen her sayfa nesnesini al\u0131r ve sitemap XML format\u0131na uygun bir \u015fekilde d\u00f6n\u00fc\u015ft\u00fcr\u00fcr. <code>url<\/code> alan\u0131 zorunludur. Di\u011fer alanlar iste\u011fe ba\u011fl\u0131d\u0131r.<\/p>\n<p><strong><code>exclude<\/code>:<\/strong> Sitemap&#8217;inizde yer almas\u0131n\u0131 istemedi\u011finiz belirli yollar\u0131 (\u00f6rne\u011fin, 404 sayfalar\u0131, geli\u015ftirme sayfalar\u0131) bu diziye ekleyebilirsiniz.<\/p>\n<p><strong><code>output<\/code>:<\/strong> Olu\u015fturulan sitemap dosyas\u0131n\u0131n ad\u0131n\u0131 ve yolunu belirtir. Varsay\u0131lan olarak <code>\/sitemap.xml<\/code>&#8216;dir.<\/p>\n<p><strong><code>createLinkInHead<\/code>:<\/strong> <code>true<\/code> olarak ayarland\u0131\u011f\u0131nda, sitenizin her HTML sayfas\u0131n\u0131n <code><head><\/code> b\u00f6l\u00fcm\u00fcne sitemap&#8217;e bir <code><link><\/code> etiketi ekler. Bu, arama motorlar\u0131n\u0131n sitemap&#8217;inizi daha kolay ke\u015ffetmesine yard\u0131mc\u0131 olabilir.<\/p>\n<p>Bu yap\u0131land\u0131rma ile, Gatsby projenizi derledi\u011finizde (<code>gatsby build<\/code>), <code>public<\/code> klas\u00f6r\u00fcn\u00fczde otomatik olarak bir <code>sitemap.xml<\/code> dosyas\u0131 olu\u015fturulacakt\u0131r.<\/p>\n<h3>Dinamik Verilerle \u00d6zel Sitemap Olu\u015fturma<\/h3>\n<p>Gatsby&#8217;nin g\u00fcc\u00fc, farkl\u0131 veri kaynaklar\u0131ndan i\u00e7erik \u00e7ekip dinamik olarak sayfalar olu\u015fturabilmesidir. Bu, headless CMS&#8217;lerden (Contentful, Sanity, Strapi), API&#8217;lerden veya hatta yerel Markdown dosyalar\u0131ndan gelen blog yaz\u0131lar\u0131, \u00fcr\u00fcn sayfalar\u0131 veya portf\u00f6y \u00f6\u011feleri gibi i\u00e7erikleri i\u00e7erir. <code>gatsby-plugin-sitemap<\/code> bu dinamik olarak olu\u015fturulan sayfalar\u0131 da sitemap&#8217;e dahil etmek i\u00e7in olduk\u00e7a esnektir.<\/p>\n<h4>Gereksinimler ve Yakla\u015f\u0131m<\/h4>\n<p>Dinamik verilerle olu\u015fturulan sayfalar\u0131n sitemap&#8217;e dahil edilmesi i\u00e7in temel olarak iki \u015feye ihtiyac\u0131m\u0131z var:<br \/>\n1.  <strong>Veri Kayna\u011f\u0131:<\/strong> \u0130\u00e7eri\u011fi sa\u011flayacak bir headless CMS, API veya dosya sistemi.<br \/>\n2.  <strong><code>gatsby-node.js<\/code>:<\/strong> Gatsby&#8217;nin <code>createPages<\/code> API&#8217;si arac\u0131l\u0131\u011f\u0131yla bu verilerden programatik olarak sayfalar olu\u015fturmak.<\/p>\n<p><code>gatsby-plugin-sitemap<\/code>, <code>gatsby-node.js<\/code>&#8216;de <code>createPages<\/code> API&#8217;si ile olu\u015fturdu\u011funuz t\u00fcm sayfalar\u0131 otomatik olarak alg\u0131layabilir. Ancak, bu sayfalar i\u00e7in <code>lastmod<\/code>, <code>changefreq<\/code> ve <code>priority<\/code> gibi \u00f6zel alanlar\u0131 sitemap&#8217;e eklemek isterseniz, <code>gatsby-config.js<\/code> dosyas\u0131ndaki <code>query<\/code> ve <code>resolvePages<\/code> fonksiyonlar\u0131n\u0131 kullanman\u0131z gerekir.<\/p>\n<h4>\u00d6rnek Senaryo: Blog Yaz\u0131lar\u0131 \u0130\u00e7in Sitemap Giri\u015fi<\/h4>\n<p>Diyelim ki blog yaz\u0131lar\u0131n\u0131z\u0131 Markdown dosyalar\u0131nda tutuyor ve her bir yaz\u0131 i\u00e7in ayr\u0131 bir sayfa olu\u015fturuyorsunuz.<\/p>\n<p><strong>1. <code>gatsby-node.js<\/code> dosyan\u0131zda sayfalar\u0131 olu\u015fturma:<\/strong><\/p>\n<pre><code class=\"language-javascript\">\/\/ gatsby-node.js\nconst path = require('path');\n\nexports.createPages = async ({ graphql, actions }) => {\n  const { createPage } = actions;\n\n  const result = await graphql(<code>\n    query {\n      allMarkdownRemark {\n        nodes {\n          fields {\n            slug\n          }\n        }\n      }\n    }\n  <\/code>);\n\n  result.data.allMarkdownRemark.nodes.forEach(node => {\n    createPage({\n      path: node.fields.slug,\n      component: path.resolve(<code>.\/src\/templates\/blog-post.js<\/code>), \/\/ \u015eablon dosyan\u0131z\n      context: {\n        slug: node.fields.slug,\n      },\n    });\n  });\n};<\/code><\/pre>\n<p><strong>2. <code>gatsby-config.js<\/code> dosyan\u0131zda sitemap yap\u0131land\u0131rmas\u0131n\u0131 g\u00fcncelleme:<\/strong><\/p>\n<p><code>gatsby-plugin-sitemap<\/code>&#8216;in <code>query<\/code> alan\u0131na <code>allMarkdownRemark<\/code> sorgusunu ekleyerek blog yaz\u0131lar\u0131n\u0131z\u0131n verilerini \u00e7ekmelisiniz. Ard\u0131ndan, <code>resolvePages<\/code> fonksiyonunda bu verileri i\u015fleyerek sitemap&#8217;e \u00f6zel giri\u015fler olu\u015fturabilirsiniz.<\/p>\n<pre><code class=\"language-javascript\">\/\/ gatsby-config.js (sadece plugin k\u0131sm\u0131)\n{\n  resolve: <code>gatsby-plugin-sitemap<\/code>,\n  options: {\n    query: <code>\n      {\n        site {\n          siteMetadata {\n            siteUrl\n          }\n        }\n        allSitePage {\n          nodes {\n            path\n          }\n        }\n        allMarkdownRemark {\n          nodes {\n            fields {\n              slug\n            }\n            frontmatter {\n              date \/\/ Markdown dosyan\u0131zdaki tarih alan\u0131\n              updatedDate \/\/ E\u011fer varsa, son g\u00fcncelleme tarihi i\u00e7in\n            }\n          }\n        }\n      }\n    <\/code>,\n    resolvePages: ({\n      allSitePage: { nodes: allPages },\n      allMarkdownRemark: { nodes: allMarkdownPages },\n    }) => {\n      const pages = allPages.map(page => {\n        return { ...page };\n      });\n\n      const markdownPages = allMarkdownPages.map(node => {\n        const lastModDate = node.frontmatter.updatedDate || node.frontmatter.date;\n        return {\n          path: node.fields.slug,\n          lastmod: lastModDate, \/\/ Son g\u00fcncelleme veya olu\u015fturulma tarihi\n          changefreq: <code>weekly<\/code>, \/\/ Haftal\u0131k olarak de\u011fi\u015fti\u011fini varsayal\u0131m\n          priority: 0.8, \/\/ Normal sayfalardan biraz daha y\u00fcksek \u00f6ncelik\n        };\n      });\n\n      return [...pages, ...markdownPages];\n    },\n    serialize: ({ path, lastmod, changefreq, priority }) => {\n      return {\n        url: path,\n        lastmod,\n        changefreq,\n        priority,\n      };\n    },\n    exclude: [\"\/dev-404-page\/\", \"\/404\/\", \"\/404.html\", \"\/offline-plugin-app-shell-fallback\/\", \"\/_dsg\/\"],\n    output: \"\/sitemap.xml\",\n    createLinkInHead: true,\n  },\n},<\/code><\/pre>\n<p>Bu yap\u0131land\u0131rma ile, blog yaz\u0131lar\u0131n\u0131z\u0131n URL&#8217;leri, son de\u011fi\u015fiklik tarihleri, de\u011fi\u015fim s\u0131kl\u0131klar\u0131 ve \u00f6ncelikleri ile birlikte sitemap&#8217;e eklenecektir. Benzer bir mant\u0131kla Contentful, Sanity veya di\u011fer headless CMS&#8217;lerden \u00e7ekti\u011finiz veriler i\u00e7in de sitemap giri\u015fleri olu\u015fturabilirsiniz. \u00d6nemli olan, GraphQL sorgunuzda ilgili verileri \u00e7ekmek ve <code>resolvePages<\/code> fonksiyonunda bunlar\u0131 sitemap format\u0131na uygun nesnelere d\u00f6n\u00fc\u015ft\u00fcrmektir.<\/p>\n<h3>Birden Fazla Sitemap (Sitemap Index) Olu\u015fturma<\/h3>\n<p>\u00c7ok b\u00fcy\u00fck siteler, milyonlarca sayfaya sahip olabilir. Tek bir sitemap dosyas\u0131, 50.000 URL veya 50 MB dosya boyutu (s\u0131k\u0131\u015ft\u0131r\u0131lmam\u0131\u015f) s\u0131n\u0131r\u0131n\u0131 a\u015fabilir. Bu t\u00fcr durumlarda, birden fazla sitemap dosyas\u0131 olu\u015fturmak ve bunlar\u0131 bir &#8220;sitemap index&#8221; dosyas\u0131 arac\u0131l\u0131\u011f\u0131yla gruplamak gerekir. Sitemap index dosyas\u0131, di\u011fer sitemap dosyalar\u0131n\u0131n konumlar\u0131n\u0131 belirtir.<\/p>\n<p><code>gatsby-plugin-sitemap<\/code> varsay\u0131lan olarak tek bir <code>sitemap.xml<\/code> dosyas\u0131 olu\u015fturur. Ancak, e\u011fer siteniz ger\u00e7ekten \u00e7ok b\u00fcy\u00fckse ve bu s\u0131n\u0131rlara yakla\u015f\u0131yorsan\u0131z, <code>gatsby-plugin-sitemap<\/code>&#8216;in do\u011frudan bir sitemap index olu\u015fturma \u00f6zelli\u011fi yoktur. Bu durumda, birka\u00e7 farkl\u0131 yakla\u015f\u0131m izlenebilir:<\/p>\n<p>1.  <strong>Manuel B\u00f6lme:<\/strong> Birden fazla <code>gatsby-plugin-sitemap<\/code> \u00f6rne\u011fini farkl\u0131 <code>output<\/code> de\u011ferleri ve <code>exclude<\/code>\/<code>filter<\/code> se\u00e7enekleriyle kullanarak farkl\u0131 sitemap dosyalar\u0131 olu\u015fturabilirsiniz (\u00f6rne\u011fin, <code>\/sitemap-blog.xml<\/code>, <code>\/sitemap-products.xml<\/code>). Ard\u0131ndan, bu ayr\u0131 sitemap dosyalar\u0131n\u0131 listeleyen manuel bir <code>sitemap-index.xml<\/code> dosyas\u0131 olu\u015fturman\u0131z gerekir. Bu, bak\u0131m a\u00e7\u0131s\u0131ndan biraz karma\u015f\u0131k olabilir.<\/p>\n<p>2.  <strong>\u00d6zel Betikler:<\/strong> Gatsby&#8217;nin build s\u00fcrecine dahil edebilece\u011finiz \u00f6zel bir Node.js beti\u011fi yazarak, <code>gatsby-plugin-sitemap<\/code> taraf\u0131ndan olu\u015fturulan tek sitemap dosyas\u0131n\u0131 al\u0131p, belirli bir sayfa say\u0131s\u0131n\u0131 a\u015fan durumlarda birden fazla dosyaya b\u00f6lerek bir sitemap index dosyas\u0131 olu\u015fturabilirsiniz. Bu, daha esnek bir \u00e7\u00f6z\u00fcm sunar ancak daha fazla geli\u015ftirme \u00e7abas\u0131 gerektirir.<\/p>\n<p>3.  <strong>Harici Ara\u00e7lar\/Servisler:<\/strong> Baz\u0131 \u00e7ok b\u00fcy\u00fck siteler, sitemap olu\u015fturma ve y\u00f6netimi i\u00e7in harici SEO ara\u00e7lar\u0131 veya servisleri kullanmay\u0131 tercih edebilir. Ancak Gatsby&#8217;nin statik yap\u0131s\u0131 g\u00f6z \u00f6n\u00fcne al\u0131nd\u0131\u011f\u0131nda, genellikle ilk iki y\u00f6ntem daha uygun olacakt\u0131r.<\/p>\n<p>\u00c7o\u011fu Gatsby sitesi i\u00e7in tek bir <code>sitemap.xml<\/code> dosyas\u0131 yeterli olacakt\u0131r. Yaln\u0131zca on binlerce veya y\u00fcz binlerce sayfaya sahip \u00e7ok b\u00fcy\u00fck siteler i\u00e7in sitemap index olu\u015fturma ihtiyac\u0131 do\u011far.<\/p>\n<h3>Sitemap&#8217;i Daha da \u00d6zelle\u015ftirmek ve \u0130leri D\u00fczey Kullan\u0131m<\/h3>\n<p>Sitemap&#8217;inizi daha etkili hale getirmek i\u00e7in XML \u015femas\u0131n\u0131n sundu\u011fu ek etiketleri kullanabilirsiniz. <code>gatsby-plugin-sitemap<\/code>&#8216;in <code>serialize<\/code> fonksiyonu, bu etiketleri sitemap&#8217;inize eklemenize olanak tan\u0131r.<\/p>\n<h4><code>changefreq<\/code> ve <code>priority<\/code><\/h4>\n<p>*   <strong><code>changefreq<\/code> (De\u011fi\u015fim S\u0131kl\u0131\u011f\u0131):<\/strong> Bir sayfan\u0131n ne s\u0131kl\u0131kla de\u011fi\u015fti\u011fini arama motorlar\u0131na bildirir. Olas\u0131 de\u011ferler: <code>always<\/code>, <code>hourly<\/code>, <code>daily<\/code>, <code>weekly<\/code>, <code>monthly<\/code>, <code>yearly<\/code>, <code>never<\/code>. Bu, arama motorlar\u0131na sayfan\u0131n ne s\u0131kl\u0131kla tekrar taranmas\u0131 gerekti\u011fi konusunda bir ipucu verir, ancak kesin bir komut de\u011fildir.<br \/>\n    *   \u00d6rnek: <code>changefreq: 'weekly'<\/code><br \/>\n*   <strong><code>priority<\/code> (\u00d6ncelik):<\/strong> Bir sayfan\u0131n sitenizdeki di\u011fer sayfalara g\u00f6receli \u00f6nemini belirtir. De\u011ferler 0.0 ile 1.0 aras\u0131nda de\u011fi\u015fir, varsay\u0131lan 0.5&#8217;tir. Daha y\u00fcksek bir de\u011fer, sayfan\u0131n daha \u00f6nemli oldu\u011funu g\u00f6sterir. Yine, bu bir ipucudur, kesin bir s\u0131ralama fakt\u00f6r\u00fc de\u011fildir.<br \/>\n    *   \u00d6rnek: <code>priority: 0.7<\/code><\/p>\n<p>Bu de\u011ferleri <code>gatsby-config.js<\/code> dosyan\u0131zdaki <code>resolvePages<\/code> fonksiyonunda her sayfa i\u00e7in dinamik olarak belirleyebilir ve <code>serialize<\/code> fonksiyonu arac\u0131l\u0131\u011f\u0131yla sitemap&#8217;e ekleyebilirsiniz.<\/p>\n<h4><code>lastmod<\/code> (Son De\u011fi\u015fiklik Tarihi)<\/h4>\n<p><code>lastmod<\/code> etiketi, bir sayfan\u0131n en son ne zaman de\u011fi\u015ftirildi\u011fini belirtir. Bu, arama motorlar\u0131n\u0131n sitenizdeki g\u00fcncel i\u00e7eri\u011fi daha h\u0131zl\u0131 fark etmesine yard\u0131mc\u0131 olur. Tarih, W3C Datetime format\u0131nda (YYYY-MM-DD veya YYYY-MM-DDTHH:MM:SS+ZZ:ZZ) olmal\u0131d\u0131r.<\/p>\n<p>*   \u00d6rnek: <code>lastmod: '2023-10-27T10:00:00+03:00'<\/code><\/p>\n<p>Dinamik i\u00e7erikler i\u00e7in (blog yaz\u0131lar\u0131, \u00fcr\u00fcnler vb.), bu de\u011feri veri kayna\u011f\u0131n\u0131zdan (\u00f6rne\u011fin, Markdown frontmatter&#8217;daki <code>date<\/code> veya headless CMS&#8217;deki <code>updatedAt<\/code> alan\u0131) \u00e7ekerek kullanmal\u0131s\u0131n\u0131z.<\/p>\n<h4><code>image:loc<\/code> ve <code>video:loc<\/code> (Medya Sitemap Giri\u015fleri)<\/h4>\n<p>Arama motorlar\u0131, g\u00f6rselleri ve videolar\u0131 da dizine ekleyebilir. \u00d6zel medya sitemap&#8217;leri veya mevcut sitemap&#8217;inize medya bilgileri ekleyerek bu i\u00e7eriklerin ke\u015ffedilmesini art\u0131rabilirsiniz. <code>gatsby-plugin-sitemap<\/code> varsay\u0131lan olarak bunlar\u0131 desteklemez. Medya sitemap&#8217;leri i\u00e7in genellikle ayr\u0131 bir eklentiye veya \u00f6zel bir yakla\u015f\u0131ma ihtiyac\u0131n\u0131z olacakt\u0131r.<\/p>\n<p>\u00d6rne\u011fin, g\u00f6rseller i\u00e7in <code>gatsby-plugin-image<\/code> kullan\u0131yorsan\u0131z, g\u00f6rsellerinizin URL&#8217;lerini sitemap&#8217;e dahil etmek i\u00e7in <code>serialize<\/code> fonksiyonunu geni\u015fletebilir veya ayr\u0131 bir sitemap olu\u015fturabilirsiniz. Bu, daha karma\u015f\u0131k bir \u00f6zelle\u015ftirme gerektirir.<\/p>\n<pre><code class=\"language-javascript\">\/\/ \u00d6rnek bir yakla\u015f\u0131m (gatsby-plugin-sitemap do\u011frudan desteklemedi\u011fi i\u00e7in bu k\u0131s\u0131m teoriktir veya ek plugin gerektirir)\n\/\/ gatsby-config.js i\u00e7inde serialize fonksiyonu\nserialize: ({ path, lastmod, changefreq, priority, images }) => {\n  const url = path;\n  const entry = { url, lastmod, changefreq, priority };\n\n  if (images && images.length > 0) {\n    entry.img = images.map(image => ({\n      url: image.src,\n      caption: image.caption,\n      title: image.title,\n      loc: image.src, \/\/ img:loc etiketi i\u00e7in\n      \/\/ di\u011fer img etiketleri...\n    }));\n  }\n  return entry;\n},<\/code><\/pre>\n<p>Bu t\u00fcr bir medya entegrasyonu i\u00e7in, <code>resolvePages<\/code> sorgunuzun her sayfa i\u00e7in ilgili g\u00f6rsel URL&#8217;lerini de \u00e7ekmesi ve <code>serialize<\/code> fonksiyonunun bu verileri do\u011fru XML format\u0131na d\u00f6n\u00fc\u015ft\u00fcrmesi gerekir. Bu genellikle <code>gatsby-plugin-sitemap<\/code>&#8216;in standart yeteneklerinin \u00f6tesine ge\u00e7er ve ek bir <code>gatsby-plugin-sitemap-images<\/code> gibi bir eklenti veya \u00f6zel bir betik gerektirebilir.<\/p>\n<h4>\u00c7oklu Dil Sitemap&#8217;leri (<code>hreflang<\/code>)<\/h4>\n<p>Uluslararas\u0131 siteler i\u00e7in, ayn\u0131 i\u00e7eri\u011fin farkl\u0131 dillerdeki veya b\u00f6lgelerdeki versiyonlar\u0131n\u0131 belirtmek i\u00e7in <code>hreflang<\/code> etiketlerini kullanmak \u00f6nemlidir. Bu, arama motorlar\u0131n\u0131n do\u011fru dil s\u00fcr\u00fcm\u00fcn\u00fc do\u011fru kullan\u0131c\u0131ya g\u00f6stermesine yard\u0131mc\u0131 olur. Sitemap i\u00e7inde <code>hreflang<\/code> eklemek, her sayfa i\u00e7in alternatif dil URL&#8217;lerini belirtmeyi gerektirir.<\/p>\n<pre><code class=\"language-xml\"><url>\n  <loc>https:\/\/www.example.com\/en\/page<\/loc>\n  <xhtml:link\n    rel=\"alternate\"\n    hreflang=\"es\"\n    href=\"https:\/\/www.example.com\/es\/page\"\n  \/>\n  <xhtml:link\n    rel=\"alternate\"\n    hreflang=\"fr\"\n    href=\"https:\/\/www.example.com\/fr\/page\"\n  \/>\n<\/url><\/code><\/pre>\n<p><code>gatsby-plugin-sitemap<\/code> do\u011frudan <code>hreflang<\/code> deste\u011fi sunmaz. Bu \u00f6zelli\u011fi eklemek i\u00e7in <code>serialize<\/code> fonksiyonunu geni\u015fletmeniz ve her sayfa i\u00e7in alternatif dil URL&#8217;lerini i\u00e7eren bir veri yap\u0131s\u0131n\u0131 sorgulaman\u0131z ve XML \u00e7\u0131kt\u0131s\u0131na uygun \u015fekilde d\u00f6n\u00fc\u015ft\u00fcrmeniz gerekir. Bu, genellikle sitenizdeki \u00e7oklu dil stratejisine ve sayfa olu\u015fturma mekanizmas\u0131na ba\u011fl\u0131 olarak karma\u015f\u0131k bir \u00f6zelle\u015ftirme olabilir.<\/p>\n<h3>Olu\u015fturulan Sitemap&#8217;i Kontrol Etme ve Arama Motorlar\u0131na Bildirme<\/h3>\n<p>Sitemap&#8217;inizi olu\u015fturduktan sonra, do\u011frulu\u011funu kontrol etmek ve arama motorlar\u0131na bildirmek son derece \u00f6nemlidir.<\/p>\n<h4>Sitemap URL&#8217;si<\/h4>\n<p>Gatsby projenizi derledikten sonra (<code>gatsby build<\/code>), sitemap dosyan\u0131z genellikle <code>public\/sitemap.xml<\/code> yolunda bulunur. Siteniz canl\u0131ya al\u0131nd\u0131\u011f\u0131nda, bu dosya <code>https:\/\/www.yourdomain.com\/sitemap.xml<\/code> adresinden eri\u015filebilir olacakt\u0131r.<\/p>\n<h4>Taray\u0131c\u0131da Kontrol<\/h4>\n<p>Sitemap&#8217;inizin do\u011fru XML format\u0131nda oldu\u011fundan emin olmak i\u00e7in taray\u0131c\u0131n\u0131zda <code>https:\/\/www.yourdomain.com\/sitemap.xml<\/code> adresine gidin. XML yap\u0131s\u0131n\u0131 g\u00f6rebilmeniz gerekir. Hatal\u0131 bir XML yap\u0131s\u0131, arama motorlar\u0131n\u0131n sitemap&#8217;inizi okumas\u0131n\u0131 engelleyebilir.<\/p>\n<h4>Google Search Console&#8217;a G\u00f6nderme<\/h4>\n<p>1.  <strong>Google Search Console&#8217;a Giri\u015f Yap\u0131n:<\/strong> E\u011fer hen\u00fcz yapmad\u0131ysan\u0131z, sitenizi Google Search Console&#8217;a ekleyin ve do\u011frulay\u0131n.<br \/>\n2.  <strong>&#8220;Sitemaps&#8221; B\u00f6l\u00fcm\u00fcne Gidin:<\/strong> Sol men\u00fcden &#8220;Sitemaps&#8221; (Sitemap&#8217;ler) se\u00e7ene\u011fini t\u0131klay\u0131n.<br \/>\n3.  <strong>Sitemap&#8217;i Ekleyin:<\/strong> &#8220;Add a new sitemap&#8221; (Yeni sitemap ekle) b\u00f6l\u00fcm\u00fcne <code>sitemap.xml<\/code> (tam URL de\u011fil, sadece dosya ad\u0131) yaz\u0131n ve &#8220;Submit&#8221; (G\u00f6nder) butonuna t\u0131klay\u0131n.<br \/>\n4.  <strong>Durumu \u0130zleyin:<\/strong> Google, sitemap&#8217;inizi i\u015flemeye ba\u015flayacak ve durumu hakk\u0131nda bilgi verecektir. Herhangi bir hata varsa burada g\u00f6rebilirsiniz.<\/p>\n<p>Benzer \u015fekilde, Bing Webmaster Tools gibi di\u011fer arama motoru ara\u00e7lar\u0131na da sitemap&#8217;inizi g\u00f6ndermelisiniz.<\/p>\n<h4><code>robots.txt<\/code> Dosyas\u0131na Ekleme<\/h4>\n<p>Arama motorlar\u0131na sitemap&#8217;inizin konumunu bildirmek i\u00e7in <code>robots.txt<\/code> dosyan\u0131za da bir giri\u015f ekleyebilirsiniz. Bu, arama motorlar\u0131n\u0131n sitemap&#8217;inizi daha h\u0131zl\u0131 ke\u015ffetmesine yard\u0131mc\u0131 olur.<\/p>\n<p><code>robots.txt<\/code> dosyan\u0131z\u0131 <code>static<\/code> klas\u00f6r\u00fcn\u00fcze yerle\u015ftirin (Gatsby, build s\u0131ras\u0131nda <code>static<\/code> klas\u00f6r\u00fcndeki dosyalar\u0131 <code>public<\/code> klas\u00f6r\u00fcn\u00fcn k\u00f6k\u00fcne kopyalar).<\/p>\n<pre><code class=\"language-\"># robots.txt\nUser-agent: *\nAllow: \/\n\nSitemap: https:\/\/www.example.com\/sitemap.xml<\/code><\/pre>\n<p><code>Sitemap:<\/code> y\u00f6nergesinin yan\u0131na tam sitemap URL&#8217;nizi yazd\u0131\u011f\u0131n\u0131zdan emin olun.<\/p>\n<h3>S\u0131k Kar\u015f\u0131la\u015f\u0131lan Sorunlar ve \u00c7\u00f6z\u00fcmleri<\/h3>\n<p>Sitemap olu\u015fturma s\u00fcrecinde baz\u0131 yayg\u0131n sorunlarla kar\u015f\u0131la\u015fabilirsiniz. \u0130\u015fte bunlardan baz\u0131lar\u0131 ve olas\u0131 \u00e7\u00f6z\u00fcmleri:<\/p>\n<p>*   <strong>Sayfalar\u0131n Sitemap&#8217;te G\u00f6r\u00fcnmemesi:<\/strong><br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> <code>gatsby-config.js<\/code> dosyas\u0131ndaki <code>query<\/code> alan\u0131n\u0131z\u0131 kontrol edin. T\u00fcm sayfalar\u0131n\u0131z\u0131 (hem <code>allSitePage<\/code> hem de dinamik olarak olu\u015fturdu\u011funuz sayfalar i\u00e7in sorgular) do\u011fru bir \u015fekilde \u00e7ekiyor musunuz? <code>resolvePages<\/code> fonksiyonunuzun bu sayfalar\u0131 d\u00f6nd\u00fcrd\u00fc\u011f\u00fcnden emin olun. <code>exclude<\/code> dizinizde yanl\u0131\u015fl\u0131kla dahil edilmemesi gereken sayfalar var m\u0131 kontrol edin.<br \/>\n*   <strong>Yanl\u0131\u015f URL&#8217;ler (\u00d6rn: <code>localhost:8000<\/code> URL&#8217;leri):<\/strong><br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> <code>gatsby-config.js<\/code> dosyan\u0131zdaki <code>siteMetadata.siteUrl<\/code> ve\/veya <code>resolveSiteUrl<\/code> de\u011ferlerinin do\u011fru, tam alan ad\u0131n\u0131z\u0131 (\u00f6rne\u011fin, <code>https:\/\/www.example.com<\/code>) i\u00e7erdi\u011finden emin olun. Bu, en yayg\u0131n sitemap sorunlar\u0131ndan biridir.<br \/>\n*   <strong>Sitemap Dosyas\u0131n\u0131n Olu\u015fturulmamas\u0131:<\/strong><br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> <code>gatsby build<\/code> komutunu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zdan ve herhangi bir hata mesaj\u0131 al\u0131p almad\u0131\u011f\u0131n\u0131z\u0131 kontrol edin. <code>gatsby-plugin-sitemap<\/code>&#8216;in <code>plugins<\/code> dizisinde do\u011fru bir \u015fekilde yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131ndan emin olun.<br \/>\n*   <strong>GraphQL Sorgu Hatalar\u0131:<\/strong><br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> <code>gatsby develop<\/code> komutuyla geli\u015ftirme sunucunuzu \u00e7al\u0131\u015ft\u0131r\u0131n ve <code>http:\/\/localhost:8000\/__graphql<\/code> adresindeki GraphiQL aray\u00fcz\u00fcn\u00fc kullanarak sorgunuzu test edin. Sorgunuzun bekledi\u011finiz verileri d\u00f6nd\u00fcrd\u00fc\u011f\u00fcnden emin olun.<br \/>\n*   <strong>Performans Sorunlar\u0131 (\u00c7ok B\u00fcy\u00fck Sitemap&#8217;ler):<\/strong><br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> E\u011fer sitenizde on binlerce sayfa varsa ve <code>gatsby build<\/code> s\u00fcreci sitemap olu\u015ftururken yava\u015fl\u0131yorsa, <code>query<\/code> sorgunuzu optimize etmeyi d\u00fc\u015f\u00fcnebilirsiniz. Yaln\u0131zca sitemap i\u00e7in gerekli minimum veriyi \u00e7ekmeye \u00e7al\u0131\u015f\u0131n. Ayr\u0131ca, yukar\u0131da bahsedilen sitemap index olu\u015fturma yakla\u015f\u0131mlar\u0131n\u0131 de\u011ferlendirebilirsiniz.<br \/>\n*   <strong>Sitemap&#8217;in Google Search Console&#8217;da \u0130\u015flenmemesi:<\/strong><br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Sitemap URL&#8217;nizin do\u011fru oldu\u011fundan (yani taray\u0131c\u0131da eri\u015filebilir oldu\u011fundan) emin olun. XML dosyas\u0131n\u0131n ge\u00e7erli XML format\u0131nda olup olmad\u0131\u011f\u0131n\u0131 kontrol edin. Google&#8217;\u0131n sitemap&#8217;inizi i\u015flemesi biraz zaman alabilir, bu y\u00fczden sab\u0131rl\u0131 olun. Hata mesajlar\u0131n\u0131 dikkatlice okuyun.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Gatsby.js, modern web siteleri olu\u015fturmak i\u00e7in harika bir platform sunarken, SEO optimizasyonunun \u00f6nemli bir par\u00e7as\u0131 olan sitemap olu\u015fturma s\u00fcrecini de olduk\u00e7a kolayla\u015ft\u0131r\u0131r. <code>gatsby-plugin-sitemap<\/code> eklentisi sayesinde, sitenizdeki t\u00fcm sayfalar\u0131 (statik, Markdown tabanl\u0131 veya headless CMS&#8217;lerden gelen dinamik i\u00e7erikler) otomatik olarak alg\u0131layabilir ve \u00f6zelle\u015ftirilebilir bir sitemap.xml dosyas\u0131 olu\u015fturabilirsiniz.<\/p>\n<p>Bu makalede ele ald\u0131\u011f\u0131m\u0131z ad\u0131mlar\u0131 izleyerek, Gatsby sitenizin arama motorlar\u0131 taraf\u0131ndan daha etkili bir \u015fekilde ke\u015ffedilmesini, taranmas\u0131n\u0131 ve dizine eklenmesini sa\u011flayabilirsiniz. Do\u011fru yap\u0131land\u0131r\u0131lm\u0131\u015f bir sitemap, sitenizin SEO performans\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131racak ve dijital d\u00fcnyadaki g\u00f6r\u00fcn\u00fcrl\u00fc\u011f\u00fcn\u00fc g\u00fc\u00e7lendirecektir. Unutmay\u0131n, sitemap&#8217;inizi olu\u015fturduktan sonra d\u00fczenli olarak kontrol etmek ve arama motoru ara\u00e7lar\u0131nda (\u00f6zellikle Google Search Console) durumunu izlemek, uzun vadeli ba\u015far\u0131n\u0131z i\u00e7in kritik \u00f6neme sahiptir.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Gatsby.js Siteleriniz \u0130\u00e7in \u00d6zel Bir Sitemap Nas\u0131l Olu\u015fturulur?\nWeb sitenizin arama motorlar\u0131 taraf\u0131ndan do\u011fru ve eksiksiz bir \u015fekilde taranm","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-33457","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Gatsby.js Siteleriniz \u0130\u00e7in \u00d6zel Bir Sitemap Nas\u0131l Olu\u015fturulur? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gatsby.js Siteleriniz \u0130\u00e7in \u00d6zel Bir Sitemap Nas\u0131l Olu\u015fturulur?\" \/>\n<meta property=\"og:description\" content=\"Gatsby.js Siteleriniz \u0130\u00e7in \u00d6zel Bir Sitemap Nas\u0131l Olu\u015fturulur? Web sitenizin arama motorlar\u0131 taraf\u0131ndan do\u011fru ve eksiksiz bir \u015fekilde taranm\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-03T00:40:56+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Gatsby.js Siteleriniz \u0130\u00e7in \u00d6zel Bir Sitemap Nas\u0131l Olu\u015fturulur?\",\"datePublished\":\"2025-11-03T00:40:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/\"},\"wordCount\":2974,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/\",\"name\":\"Gatsby.js Siteleriniz \u0130\u00e7in \u00d6zel Bir Sitemap Nas\u0131l Olu\u015fturulur? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-03T00:40:56+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Gatsby.js Siteleriniz \u0130\u00e7in \u00d6zel Bir Sitemap Nas\u0131l Olu\u015fturulur?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Gatsby.js Siteleriniz \u0130\u00e7in \u00d6zel Bir Sitemap Nas\u0131l Olu\u015fturulur? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/","og_locale":"tr_TR","og_type":"article","og_title":"Gatsby.js Siteleriniz \u0130\u00e7in \u00d6zel Bir Sitemap Nas\u0131l Olu\u015fturulur?","og_description":"Gatsby.js Siteleriniz \u0130\u00e7in \u00d6zel Bir Sitemap Nas\u0131l Olu\u015fturulur? Web sitenizin arama motorlar\u0131 taraf\u0131ndan do\u011fru ve eksiksiz bir \u015fekilde taranm","og_url":"https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-03T00:40:56+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"18 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Gatsby.js Siteleriniz \u0130\u00e7in \u00d6zel Bir Sitemap Nas\u0131l Olu\u015fturulur?","datePublished":"2025-11-03T00:40:56+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/"},"wordCount":2974,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/","url":"https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/","name":"Gatsby.js Siteleriniz \u0130\u00e7in \u00d6zel Bir Sitemap Nas\u0131l Olu\u015fturulur? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-03T00:40:56+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/gatsby-js-siteleriniz-icin-ozel-bir-sitemap-nasil-olusturulur\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Gatsby.js Siteleriniz \u0130\u00e7in \u00d6zel Bir Sitemap Nas\u0131l Olu\u015fturulur?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33457","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=33457"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33457\/revisions"}],"predecessor-version":[{"id":33458,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33457\/revisions\/33458"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33457"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33457"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33457"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}