{"id":34794,"date":"2025-11-22T04:41:25","date_gmt":"2025-11-22T01:41:25","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=34794"},"modified":"2025-11-22T04:41:25","modified_gmt":"2025-11-22T01:41:25","slug":"giris-gatsby-ve-sayfalandirma-neden-onemli","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/giris-gatsby-ve-sayfalandirma-neden-onemli\/","title":{"rendered":"Giri\u015f: Gatsby ve Sayfaland\u0131rma Neden \u00d6nemli?"},"content":{"rendered":"<p><body><\/p>\n<h2>Giri\u015f: Gatsby ve Sayfaland\u0131rma Neden \u00d6nemli?<\/h2>\n<p>Modern web siteleri genellikle dinamik i\u00e7eri\u011fe sahip olup, bu i\u00e7eri\u011fin d\u00fczenli ve eri\u015filebilir bir \u015fekilde sunulmas\u0131 kullan\u0131c\u0131 deneyimi a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir. Gatsby, statik site olu\u015fturucu (SSG) olarak bilinir ve performans\u0131, g\u00fcvenli\u011fi ve geli\u015ftirici deneyimiyle \u00f6ne \u00e7\u0131kar. Bir blog, e-ticaret sitesi veya dok\u00fcmantasyon platformu gibi \u00e7ok say\u0131da i\u00e7eri\u011fe sahip Gatsby projelerinde, t\u00fcm i\u00e7eri\u011fi tek bir sayfada g\u00f6stermek hem y\u00fckleme s\u00fcrelerini uzat\u0131r hem de kullan\u0131c\u0131lar\u0131n arad\u0131klar\u0131n\u0131 bulmas\u0131n\u0131 zorla\u015ft\u0131r\u0131r.<\/p>\n<p>\u0130\u015fte tam bu noktada sayfaland\u0131rma (pagination) devreye girer. Sayfaland\u0131rma, i\u00e7eri\u011fi mant\u0131ksal olarak daha k\u00fc\u00e7\u00fck par\u00e7alara b\u00f6lerek farkl\u0131 sayfalarda sunma y\u00f6ntemidir. Bu, hem sitenin performans\u0131n\u0131 art\u0131r\u0131r hem de kullan\u0131c\u0131lar\u0131n i\u00e7erik aras\u0131nda kolayca gezinmesini sa\u011flar. Gatsby&#8217;nin statik yap\u0131s\u0131 nedeniyle, sayfaland\u0131rma i\u015fleminin build zaman\u0131nda ger\u00e7ekle\u015fmesi gerekir. Bu, her bir sayfa i\u00e7in ayr\u0131 bir HTML dosyas\u0131n\u0131n olu\u015fturulmas\u0131 anlam\u0131na gelir.<\/p>\n<p>Gatsby ekosisteminde sayfaland\u0131rma \u00e7\u00f6z\u00fcmleri i\u00e7in bir\u00e7ok se\u00e7enek bulunsa da, <code>gatsby-awesome-pagination<\/code> bu i\u015fi son derece basit ve etkili bir \u015fekilde halleden pop\u00fcler bir eklentidir. Bu eklenti, Gatsby&#8217;nin <code>createPages<\/code> API&#8217;sini kullanarak, sorgulad\u0131\u011f\u0131n\u0131z verilere g\u00f6re otomatik olarak sayfalar olu\u015fturur ve bu sayfalara do\u011fru ba\u011flam\u0131 (context) sa\u011flar. B\u00f6ylece, geli\u015ftiriciler karma\u015f\u0131k mant\u0131k yazmak yerine i\u00e7eri\u011fe odaklanabilirler. Bu rehberde, <code>gatsby-awesome-pagination<\/code>&#8216;\u0131 kullanarak Gatsby sitenizde nas\u0131l kapsaml\u0131 bir sayfaland\u0131rma sistemi kuraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011freneceksiniz.<\/p>\n<h2>gatsby-awesome-pagination Kurulumu ve Temel Kullan\u0131m<\/h2>\n<p><code>gatsby-awesome-pagination<\/code>&#8216;\u0131 projenize entegre etmek olduk\u00e7a basittir. \u0130lk ad\u0131m, eklentiyi projenize kurmakt\u0131r.<\/p>\n<h3>Kurulum<\/h3>\n<p>Projenizin k\u00f6k dizininde a\u015fa\u011f\u0131daki komutlardan birini \u00e7al\u0131\u015ft\u0131rarak eklentiyi y\u00fckleyebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">npm install gatsby-awesome-pagination\n<h2>veya<\/h2>\nyarn add gatsby-awesome-pagination\n<\/code><\/pre>\n<h3>gatsby-node.js Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Sayfaland\u0131rman\u0131n kalbi, Gatsby&#8217;nin build s\u00fcrecinde \u00e7al\u0131\u015fan <code>gatsby-node.js<\/code> dosyas\u0131d\u0131r. Bu dosya, GraphQL sorgular\u0131n\u0131 kullanarak verileri \u00e7eker ve <code>createPages<\/code> API&#8217;si arac\u0131l\u0131\u011f\u0131yla dinamik olarak sayfalar olu\u015fturur. <code>gatsby-awesome-pagination<\/code>, bu s\u00fcreci basitle\u015ftirmek i\u00e7in bir <code>paginate<\/code> fonksiyonu sunar.<\/p>\n<p>A\u015fa\u011f\u0131daki \u00f6rnek, Markdown dosyalar\u0131ndan (\u00f6rne\u011fin blog yaz\u0131lar\u0131) sayfaland\u0131r\u0131lm\u0131\u015f listeler olu\u015fturmay\u0131 g\u00f6stermektedir. \u00d6ncelikle, t\u00fcm Markdown yaz\u0131lar\u0131n\u0131 sorgulaman\u0131z ve ard\u0131ndan bu verileri <code>paginate<\/code> fonksiyonuna iletmeniz gerekir.<\/p>\n<pre><code class=\"language-javascript\">\/\/ gatsby-node.js\nconst { paginate } = require('gatsby-awesome-pagination');\nconst path = require('path');\n\nexports.createPages = async ({ graphql, actions }) => {\n  const { createPage } = actions;\n\n  \/\/ Blog yaz\u0131lar\u0131n\u0131 listeleyecek \u015fablonu tan\u0131mlay\u0131n\n  const blogPostListTemplate = path.resolve('.\/src\/templates\/blog-list.js');\n  const blogPostTemplate = path.resolve('.\/src\/templates\/blog-post.js'); \/\/ Tekil blog yaz\u0131lar\u0131 i\u00e7in\n\n  \/\/ T\u00fcm Markdown yaz\u0131lar\u0131n\u0131 sorgula\n  const result = await graphql(<code>\n    {\n      allMarkdownRemark(\n        sort: { fields: [frontmatter___date], order: DESC }\n        limit: 1000 \/\/ \u00c7ok say\u0131da yaz\u0131 varsa daha fazlas\u0131n\u0131 \u00e7ekin\n      ) {\n        edges {\n          node {\n            id\n            frontmatter {\n              slug\n            }\n          }\n        }\n      }\n    }\n  <\/code>);\n\n  if (result.errors) {\n    throw result.errors;\n  }\n\n  const posts = result.data.allMarkdownRemark.edges;\n\n  \/\/ Tekil blog yaz\u0131lar\u0131n\u0131 olu\u015ftur\n  posts.forEach((post, index) => {\n    const previous = index === posts.length - 1 ? null : posts[index + 1].node;\n    const next = index === 0 ? null : posts[index - 1].node;\n\n    createPage({\n      path: <code>\/blog\/${post.node.frontmatter.slug}\/<\/code>,\n      component: blogPostTemplate,\n      context: {\n        slug: post.node.frontmatter.slug,\n        previous,\n        next,\n      },\n    });\n  });\n\n  \/\/ gatsby-awesome-pagination kullanarak sayfaland\u0131r\u0131lm\u0131\u015f listeleri olu\u015ftur\n  paginate({\n    createPage, \/\/ Gatsby'nin createPage fonksiyonu\n    items: posts, \/\/ Sayfaland\u0131r\u0131lacak \u00f6\u011felerin dizisi\n    itemsPerPage: 5, \/\/ Her sayfada ka\u00e7 \u00f6\u011fe olaca\u011f\u0131\n    pathPrefix: '\/blog', \/\/ Sayfaland\u0131r\u0131lm\u0131\u015f sayfalar\u0131n URL \u00f6neki (\u00f6rne\u011fin: \/blog, \/blog\/2, \/blog\/3)\n    component: blogPostListTemplate, \/\/ Sayfaland\u0131r\u0131lm\u0131\u015f listeyi g\u00f6sterecek React bile\u015feni\n  });\n};\n<\/code><\/pre>\n<p>Yukar\u0131daki kodda \u00f6nemli noktalar:<\/p>\n<ul>\n<li><code>graphql<\/code> sorgusu, t\u00fcm blog yaz\u0131lar\u0131n\u0131 (<code>allMarkdownRemark<\/code>) \u00e7eker. Bu yaz\u0131lar daha sonra sayfaland\u0131r\u0131lacak ana veri k\u00fcmesini olu\u015fturur.<\/li>\n<li><code>paginate<\/code> fonksiyonu, <code>createPage<\/code>, <code>items<\/code> (sayfaland\u0131r\u0131lacak \u00f6\u011feler), <code>itemsPerPage<\/code> (sayfa ba\u015f\u0131na \u00f6\u011fe say\u0131s\u0131), <code>pathPrefix<\/code> (URL&#8217;lerin ba\u015flang\u0131c\u0131) ve <code>component<\/code> (sayfay\u0131 render edecek React \u015fablonu) parametrelerini al\u0131r.<\/li>\n<li><code>pathPrefix: '\/blog'<\/code> ayar\u0131 sayesinde, sayfalar <code>\/blog<\/code>, <code>\/blog\/2<\/code>, <code>\/blog\/3<\/code> \u015feklinde URL&#8217;lere sahip olacakt\u0131r.<\/li>\n<\/ul>\n<p>Bu yap\u0131land\u0131rma ile Gatsby, build zaman\u0131nda gerekli t\u00fcm sayfaland\u0131r\u0131lm\u0131\u015f listeleme sayfalar\u0131n\u0131 otomatik olarak olu\u015fturacakt\u0131r.<\/p>\n<h2>Sayfalama Bile\u015fenini Olu\u015fturma ve Verileri Kullanma<\/h2>\n<p><code>gatsby-node.js<\/code> dosyas\u0131nda tan\u0131mlad\u0131\u011f\u0131m\u0131z <code>blogPostListTemplate<\/code>, yani <code>src\/templates\/blog-list.js<\/code>, sayfaland\u0131r\u0131lm\u0131\u015f g\u00f6nderileri g\u00f6sterecek React bile\u015fenidir. Bu bile\u015fen, <code>paginate<\/code> fonksiyonunun sa\u011flad\u0131\u011f\u0131 ba\u011flam (context) verilerine eri\u015febilir.<\/p>\n<h3>\u015eablon Dosyas\u0131 (src\/templates\/blog-list.js)<\/h3>\n<p>Bu \u015fablon, sayfa ba\u015f\u0131na g\u00f6nderileri listelemek ve sayfaland\u0131rma ba\u011flant\u0131lar\u0131n\u0131 g\u00f6stermek i\u00e7in kullan\u0131lacakt\u0131r. <code>pageContext<\/code> objesi, <code>gatsby-awesome-pagination<\/code> taraf\u0131ndan sa\u011flanan t\u00fcm sayfaland\u0131rma bilgilerini i\u00e7erir.<\/p>\n<pre><code class=\"language-javascript\">\/\/ src\/templates\/blog-list.js\nimport React from 'react';\nimport { graphql, Link } from 'gatsby';\n\nconst BlogList = ({ data, pageContext }) => {\n  const posts = data.allMarkdownRemark.edges;\n  const { humanPageNumber, numberOfPages, previousPagePath, nextPagePath } = pageContext;\n\n  return (\n    <div>\n      <h2>Blog Yaz\u0131lar\u0131 - Sayfa {humanPageNumber}<\/h2>\n      <ul>\n        {posts.map(({ node }) => (\n          <li key={node.id}>\n            <Link to={<code>\/blog\/${node.frontmatter.slug}\/<\/code>}>\n              <h3>{node.frontmatter.title}<\/h3>\n              <p>{node.excerpt}<\/p>\n            <\/Link>\n          <\/li>\n        ))}\n      <\/ul>\n\n      <div style={{ marginTop: '2rem' }}>\n        <h3>Sayfa Navigasyonu<\/h3>\n        <ul style={{ display: 'flex', listStyle: 'none', padding: 0 }}>\n          {previousPagePath && (\n            <li style={{ marginRight: '1rem' }}>\n              <Link to={previousPagePath}>&larr; \u00d6nceki Sayfa<\/Link>\n            <\/li>\n          )}\n          {Array.from({ length: numberOfPages }, (_, i) => (\n            <li\n              key={<code>pagination-number${i + 1}<\/code>}\n              style={{\n                marginRight: '0.5rem',\n                fontWeight: humanPageNumber === i + 1 ? 'bold' : 'normal',\n              }}\n            >\n              <Link to={i === 0 ? <code>\/blog<\/code> : <code>\/blog\/${i + 1}<\/code>}>\n                {i + 1}\n              <\/Link>\n            <\/li>\n          ))}\n          {nextPagePath && (\n            <li>\n              <Link to={nextPagePath}>Sonraki Sayfa &rarr;<\/Link>\n            <\/li>\n          )}\n        <\/ul>\n      <\/div>\n    <\/div>\n  );\n};\n\nexport default BlogList;\n\n\/\/ Sayfa i\u00e7in GraphQL sorgusu\nexport const query = graphql<code>\n  query blogListQuery($skip: Int!, $limit: Int!) {\n    allMarkdownRemark(\n      sort: { fields: [frontmatter___date], order: DESC }\n      skip: $skip\n      limit: $limit\n    ) {\n      edges {\n        node {\n          id\n          frontmatter {\n            title\n            date(formatString: \"DD MMMM, YYYY\")\n            slug\n          }\n          excerpt(pruneLength: 200)\n        }\n      }\n    }\n  }\n<\/code>;\n<\/code><\/pre>\n<p>Bu bile\u015fendeki kilit noktalar:<\/p>\n<ul>\n<li><code>pageContext<\/code>: Bu prop, <code>gatsby-awesome-pagination<\/code> taraf\u0131ndan otomatik olarak doldurulur. \u0130\u00e7erisinde <code>humanPageNumber<\/code> (mevcut sayfa numaras\u0131), <code>numberOfPages<\/code> (toplam sayfa say\u0131s\u0131), <code>previousPagePath<\/code> (\u00f6nceki sayfan\u0131n URL&#8217;si) ve <code>nextPagePath<\/code> (sonraki sayfan\u0131n URL&#8217;si) gibi yararl\u0131 bilgiler bulunur.<\/li>\n<li><code>graphql<\/code> sorgusu: Bu sorgu, <code>$skip<\/code> ve <code>$limit<\/code> de\u011fi\u015fkenlerini kullanarak sadece mevcut sayfaya ait g\u00f6nderileri \u00e7eker. Bu de\u011fi\u015fkenler, <code>gatsby-node.js<\/code>&#8216;deki <code>paginate<\/code> fonksiyonu taraf\u0131ndan otomatik olarak <code>pageContext<\/code>&#8216;e eklenir ve sorguya iletilir.<\/li>\n<li>Navigasyon: <code>previousPagePath<\/code>, <code>nextPagePath<\/code> ve <code>numberOfPages<\/code> kullanarak dinamik olarak &#8220;\u00d6nceki&#8221;, &#8220;Sonraki&#8221; ve sayfa numaras\u0131 ba\u011flant\u0131lar\u0131n\u0131 olu\u015fturabiliriz. <code>Link<\/code> bile\u015feni, Gatsby&#8217;nin performansl\u0131 sayfa ge\u00e7i\u015flerini sa\u011flar.<\/li>\n<\/ul>\n<p>Bu \u015fablon sayesinde, her bir sayfaland\u0131r\u0131lm\u0131\u015f sayfa do\u011fru i\u00e7eri\u011fi g\u00f6sterecek ve kullan\u0131c\u0131lar sayfalar aras\u0131nda rahat\u00e7a gezinebilecektir.<\/p>\n<h2>Geli\u015fmi\u015f \u00d6zellikler ve En \u0130yi Uygulamalar<\/h2>\n<p><code>gatsby-awesome-pagination<\/code>, temel sayfaland\u0131rman\u0131n \u00f6tesinde, daha esnek ve g\u00fc\u00e7l\u00fc \u00e7\u00f6z\u00fcmler sunmak i\u00e7in baz\u0131 geli\u015fmi\u015f \u00f6zellikler ve en iyi uygulamalarla birlikte kullan\u0131labilir.<\/p>\n<h3>Farkl\u0131 \u0130\u00e7erik T\u00fcrleri ve Birden Fazla Sayfaland\u0131rma<\/h3>\n<p>Blog yaz\u0131lar\u0131n\u0131 sayfaland\u0131rd\u0131\u011f\u0131m\u0131z gibi, \u00fcr\u00fcnler, kategoriler veya farkl\u0131 dillerdeki i\u00e7erikler gibi di\u011fer i\u00e7erik t\u00fcrlerini de sayfaland\u0131rabilirsiniz. Tek yapman\u0131z gereken, <code>gatsby-node.js<\/code> dosyas\u0131nda her i\u00e7erik t\u00fcr\u00fc i\u00e7in ayr\u0131 bir GraphQL sorgusu yapmak ve her biri i\u00e7in ayr\u0131 bir <code>paginate<\/code> \u00e7a\u011fr\u0131s\u0131 yapmakt\u0131r. Her <code>paginate<\/code> \u00e7a\u011fr\u0131s\u0131 i\u00e7in farkl\u0131 bir <code>pathPrefix<\/code> ve <code>component<\/code> kullanarak \u00e7ak\u0131\u015fmalar\u0131 \u00f6nleyebilirsiniz.<\/p>\n<pre><code class=\"language-javascript\">\/\/ gatsby-node.js i\u00e7inde birden fazla paginate \u00f6rne\u011fi\n\/\/ ... (\u00f6nceki kodlar)\n\n\/\/ Kategorilere g\u00f6re sayfaland\u0131rma \u00f6rne\u011fi\nconst categories = await graphql(<code>\n  {\n    allCategory { \/\/ Kategori verilerinizi \u00e7eken bir sorgu\n      group(field: name) {\n        fieldValue\n        totalCount\n      }\n    }\n  }\n<\/code>);\n\ncategories.data.allCategory.group.forEach(category => {\n  paginate({\n    createPage,\n    items: posts.filter(post => post.node.frontmatter.category === category.fieldValue),\n    itemsPerPage: 5,\n    pathPrefix: <code>\/category\/${category.fieldValue.toLowerCase()}<\/code>,\n    component: path.resolve('.\/src\/templates\/category-list.js'), \/\/ Kategori listesi \u015fablonu\n    context: {\n      category: category.fieldValue,\n    },\n  });\n});\n<\/code><\/pre>\n<p>Bu \u00f6rnekte, her kategori i\u00e7in ayr\u0131 bir sayfaland\u0131r\u0131lm\u0131\u015f liste olu\u015fturulmu\u015ftur. <code>context<\/code> objesi arac\u0131l\u0131\u011f\u0131yla kategori ad\u0131n\u0131 \u015fablona ileterek, \u015fablon i\u00e7inde ba\u015fl\u0131\u011f\u0131 veya filtrelemeyi \u00f6zelle\u015ftirebilirsiniz.<\/p>\n<h3>SEO Dostu Sayfaland\u0131rma<\/h3>\n<p>Sayfaland\u0131r\u0131lm\u0131\u015f sayfalar i\u00e7in SEO \u00f6nemlidir. Arama motorlar\u0131n\u0131n i\u00e7eri\u011finizi do\u011fru bir \u015fekilde dizine eklemesini sa\u011flamak i\u00e7in a\u015fa\u011f\u0131daki noktalar\u0131 g\u00f6z \u00f6n\u00fcnde bulundurun:<\/p>\n<ul>\n<li><strong>Canonical URL&#8217;ler:<\/strong> Her sayfaland\u0131r\u0131lm\u0131\u015f sayfa, ana sayfaya veya ilk sayfaya i\u015faret eden bir canonical URL&#8217;e sahip olmal\u0131d\u0131r. Bu, arama motorlar\u0131n\u0131n yinelenen i\u00e7erik olarak alg\u0131lamas\u0131n\u0131 \u00f6nler. Bunu <code>gatsby-plugin-react-helmet<\/code> kullanarak yapabilirsiniz.\n<pre><code class=\"language-javascript\">\/\/ src\/templates\/blog-list.js i\u00e7inde <Helmet> kullan\u0131m\u0131\nimport { Helmet } from 'react-helmet';\n\n\/\/ ... bile\u015fen i\u00e7inde\n<Helmet>\n  <link rel=\"canonical\" href={<code>https:\/\/siteniz.com${pathPrefix}<\/code>} \/>\n  {previousPagePath && <link rel=\"prev\" href={<code>https:\/\/siteniz.com${previousPagePath}<\/code>} \/>}\n  {nextPagePath && <link rel=\"next\" href={<code>https:\/\/siteniz.com${nextPagePath}<\/code>} \/>}\n<\/Helmet>\n        <\/code><\/pre>\n<\/li>\n<li><strong><code>rel=\"prev\"<\/code> ve <code>rel=\"next\"<\/code>:<\/strong> Bu etiketler, arama motorlar\u0131na sayfalar aras\u0131ndaki ili\u015fkiyi bildirir. <code>gatsby-awesome-pagination<\/code>&#8216;\u0131n sa\u011flad\u0131\u011f\u0131 <code>previousPagePath<\/code> ve <code>nextPagePath<\/code> de\u011ferlerini kullanarak bu etiketleri kolayca ekleyebilirsiniz.<\/li>\n<\/ul>\n<h3>Sayfalama Bile\u015fenini \u00d6zelle\u015ftirme<\/h3>\n<p>Yukar\u0131daki \u00f6rnekte basit bir navigasyon g\u00f6sterdik. Kendi CSS&#8217;inizi veya bir UI k\u00fct\u00fcphanesini (\u00f6rne\u011fin Tailwind CSS, styled-components) kullanarak sayfaland\u0131rma bile\u015fenini tamamen \u00f6zelle\u015ftirebilirsiniz. <code>pageContext<\/code> i\u00e7indeki t\u00fcm veriler (<code>humanPageNumber<\/code>, <code>numberOfPages<\/code>, <code>pagePaths<\/code> vb.) size bu konuda tam kontrol sa\u011flar.<\/p>\n<h3>Performans \u0130pu\u00e7lar\u0131<\/h3>\n<ul>\n<li><strong><code>limit<\/code> ve <code>skip<\/code> kullan\u0131m\u0131:<\/strong> GraphQL sorgular\u0131n\u0131zda <code>$limit<\/code> ve <code>$skip<\/code> de\u011fi\u015fkenlerini kullanarak sadece ihtiyac\u0131n\u0131z olan verileri \u00e7ekin. <code>gatsby-awesome-pagination<\/code> bunu sizin i\u00e7in otomatik olarak yapar.<\/li>\n<li><strong>Gereksiz Veri \u00c7ekmekten Ka\u00e7\u0131n\u0131n:<\/strong> Sadece sayfaland\u0131r\u0131lm\u0131\u015f listeleme sayfalar\u0131nda g\u00f6sterece\u011finiz alanlar\u0131 (\u00f6rne\u011fin ba\u015fl\u0131k, \u00f6zet, slug) sorgulay\u0131n. Tekil yaz\u0131 sayfalar\u0131nda daha fazla detay\u0131 sorgulayabilirsiniz.<\/li>\n<\/ul>\n<p>Bu geli\u015fmi\u015f \u00f6zellikler ve en iyi uygulamalarla, Gatsby sitenizde sadece i\u015flevsel de\u011fil, ayn\u0131 zamanda kullan\u0131c\u0131 dostu ve arama motoru dostu bir sayfaland\u0131rma deneyimi sunabilirsiniz.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<p>Gatsby projelerinde sayfaland\u0131rma, b\u00fcy\u00fck i\u00e7erik k\u00fcmelerini y\u00f6netmek ve kullan\u0131c\u0131 deneyimini iyile\u015ftirmek i\u00e7in vazge\u00e7ilmez bir \u00f6zelliktir. <code>gatsby-awesome-pagination<\/code> eklentisi, bu karma\u015f\u0131k g\u00f6revi Gatsby&#8217;nin g\u00fc\u00e7l\u00fc <code>createPages<\/code> API&#8217;si ile birle\u015ftirerek son derece basit ve etkili bir hale getirir. Bu rehberde, kurulumdan temel kullan\u0131ma, sayfaland\u0131rma bile\u015feni olu\u015fturmaktan geli\u015fmi\u015f \u00f6zelliklere kadar t\u00fcm s\u00fcreci detayl\u0131 bir \u015fekilde ele ald\u0131k.<\/p>\n<p>Art\u0131k Gatsby sitelerinizde i\u00e7erik ak\u0131\u015f\u0131n\u0131 d\u00fczenleyebilir, performans\u0131 art\u0131rabilir ve kullan\u0131c\u0131lar\u0131n\u0131z\u0131n arad\u0131klar\u0131 bilgiye daha h\u0131zl\u0131 ula\u015fmas\u0131n\u0131 sa\u011flayabilirsiniz. <code>gatsby-awesome-pagination<\/code>&#8216;\u0131n sundu\u011fu esneklik sayesinde, farkl\u0131 i\u00e7erik t\u00fcrleri i\u00e7in birden fazla sayfaland\u0131rma sistemi kurabilir, SEO dostu uygulamalarla arama motorlar\u0131ndaki g\u00f6r\u00fcn\u00fcrl\u00fc\u011f\u00fcn\u00fcz\u00fc art\u0131rabilir ve tamamen \u00f6zelle\u015ftirilebilir bir kullan\u0131c\u0131 aray\u00fcz\u00fc sunabilirsiniz.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><strong>1. <code>gatsby-awesome-pagination<\/code> farkl\u0131 i\u00e7erik t\u00fcrlerini sayfaland\u0131rabilir mi?<\/strong><\/p>\n<p>Evet, kesinlikle. <code>gatsby-node.js<\/code> dosyan\u0131zda her i\u00e7erik t\u00fcr\u00fc i\u00e7in (\u00f6rne\u011fin, blog yaz\u0131lar\u0131, \u00fcr\u00fcnler, dok\u00fcmanlar) ayr\u0131 GraphQL sorgular\u0131 yapabilir ve her biri i\u00e7in ayr\u0131 <code>paginate<\/code> \u00e7a\u011fr\u0131lar\u0131 kullanabilirsiniz. Her \u00e7a\u011fr\u0131 i\u00e7in farkl\u0131 bir <code>pathPrefix<\/code> ve React \u015fablonu (<code>component<\/code>) tan\u0131mlaman\u0131z yeterlidir.<\/p>\n<p><strong>2. Sayfalama bile\u015fenini nas\u0131l stilize edebilirim?<\/strong><\/p>\n<p>Sayfalama bile\u015fenini tamamen kendi CSS&#8217;inizle, CSS mod\u00fclleriyle, Styled Components gibi CSS-in-JS k\u00fct\u00fcphaneleriyle veya Tailwind CSS gibi utility-first CSS framework&#8217;leriyle stilize edebilirsiniz. <code>pageContext<\/code> i\u00e7indeki <code>humanPageNumber<\/code> gibi bilgilere eri\u015ferek aktif sayfay\u0131 vurgulayabilirsiniz.<\/p>\n<p><strong>3. \u00c7ok say\u0131da (\u00f6rne\u011fin on binlerce) yaz\u0131 varsa ne yapmal\u0131y\u0131m?<\/strong><\/p>\n<p>Gatsby&#8217;nin build s\u00fcresi, olu\u015fturulan sayfa say\u0131s\u0131yla do\u011fru orant\u0131l\u0131d\u0131r. \u00c7ok say\u0131da sayfa olu\u015fturmak build s\u00fcresini uzatabilir. Ancak <code>gatsby-awesome-pagination<\/code>, <code>$skip<\/code> ve <code>$limit<\/code> kullanarak verimli GraphQL sorgular\u0131 yapman\u0131z\u0131 sa\u011flar. Performans sorunlar\u0131 ya\u015farsan\u0131z, Incremental Builds gibi Gatsby Cloud \u00f6zelliklerini veya daha az kritik sayfalar\u0131 daha az s\u0131kl\u0131kla g\u00fcncellemeyi d\u00fc\u015f\u00fcnebilirsiniz. Ayr\u0131ca, <code>gatsby-node.js<\/code> i\u00e7indeki <code>limit<\/code> parametresini art\u0131rarak t\u00fcm verileri \u00e7ekti\u011finizden emin olun.<\/p>\n<p><strong>4. <code>gatsby-awesome-pagination<\/code>&#8216;\u0131 di\u011fer GraphQL kaynaklar\u0131yla kullanabilir miyim?<\/strong><\/p>\n<p>Evet, <code>gatsby-source-filesystem<\/code> ile Markdown dosyalar\u0131n\u0131 kulland\u0131\u011f\u0131m\u0131z gibi, <code>gatsby-source-shopify<\/code>, <code>gatsby-source-wordpress<\/code> veya \u00f6zel bir API&#8217;den veri \u00e7eken herhangi bir GraphQL kayna\u011f\u0131yla da kullanabilirsiniz. \u00d6nemli olan, <code>gatsby-node.js<\/code> i\u00e7inde <code>paginate<\/code> fonksiyonuna iletece\u011finiz <code>items<\/code> dizisinin do\u011fru veri yap\u0131s\u0131na sahip olmas\u0131d\u0131r.<\/p>\n<p><strong>5. Sayfaland\u0131r\u0131lm\u0131\u015f sayfalar i\u00e7in SEO nas\u0131l yap\u0131l\u0131r?<\/strong><\/p>\n<p>Her sayfaland\u0131r\u0131lm\u0131\u015f sayfan\u0131n HTML <code><head><\/code> b\u00f6l\u00fcm\u00fcne uygun <code><link rel=\"canonical\"><\/code>, <code><link rel=\"prev\"><\/code> ve <code><link rel=\"next\"><\/code> etiketlerini eklemek \u00f6nemlidir. <code>gatsby-plugin-react-helmet<\/code> kullanarak bu etiketleri kolayca y\u00f6netebilir ve arama motorlar\u0131n\u0131n sayfalar\u0131n\u0131z aras\u0131ndaki ili\u015fkiyi do\u011fru anlamas\u0131n\u0131 sa\u011flayabilirsiniz. Canonical URL&#8217;i genellikle ana listeleme sayfas\u0131na (\u00f6rne\u011fin <code>\/blog<\/code>) i\u015faret etmeli, <code>prev<\/code> ve <code>next<\/code> ise ilgili \u00f6nceki ve sonraki sayfalara i\u015faret etmelidir.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Giri\u015f: Gatsby ve Sayfaland\u0131rma Neden \u00d6nemli?\nModern web siteleri genellikle dinamik i\u00e7eri\u011fe sahip olup, bu i\u00e7eri\u011fin d\u00fczenli ve eri\u015filebilir","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-34794","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>Giri\u015f: Gatsby ve Sayfaland\u0131rma Neden \u00d6nemli? - 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\/giris-gatsby-ve-sayfalandirma-neden-onemli\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Giri\u015f: Gatsby ve Sayfaland\u0131rma Neden \u00d6nemli?\" \/>\n<meta property=\"og:description\" content=\"Giri\u015f: Gatsby ve Sayfaland\u0131rma Neden \u00d6nemli? Modern web siteleri genellikle dinamik i\u00e7eri\u011fe sahip olup, bu i\u00e7eri\u011fin d\u00fczenli ve eri\u015filebilir\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/giris-gatsby-ve-sayfalandirma-neden-onemli\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-22T01:41:25+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=\"10 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-gatsby-ve-sayfalandirma-neden-onemli\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-gatsby-ve-sayfalandirma-neden-onemli\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Giri\u015f: Gatsby ve Sayfaland\u0131rma Neden \u00d6nemli?\",\"datePublished\":\"2025-11-22T01:41:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-gatsby-ve-sayfalandirma-neden-onemli\/\"},\"wordCount\":1547,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/giris-gatsby-ve-sayfalandirma-neden-onemli\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-gatsby-ve-sayfalandirma-neden-onemli\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/giris-gatsby-ve-sayfalandirma-neden-onemli\/\",\"name\":\"Giri\u015f: Gatsby ve Sayfaland\u0131rma Neden \u00d6nemli? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-22T01:41:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-gatsby-ve-sayfalandirma-neden-onemli\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/giris-gatsby-ve-sayfalandirma-neden-onemli\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-gatsby-ve-sayfalandirma-neden-onemli\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Giri\u015f: Gatsby ve Sayfaland\u0131rma Neden \u00d6nemli?\"}]},{\"@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":"Giri\u015f: Gatsby ve Sayfaland\u0131rma Neden \u00d6nemli? - 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\/giris-gatsby-ve-sayfalandirma-neden-onemli\/","og_locale":"tr_TR","og_type":"article","og_title":"Giri\u015f: Gatsby ve Sayfaland\u0131rma Neden \u00d6nemli?","og_description":"Giri\u015f: Gatsby ve Sayfaland\u0131rma Neden \u00d6nemli? Modern web siteleri genellikle dinamik i\u00e7eri\u011fe sahip olup, bu i\u00e7eri\u011fin d\u00fczenli ve eri\u015filebilir","og_url":"https:\/\/fatihsoysal.com\/blog\/giris-gatsby-ve-sayfalandirma-neden-onemli\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-22T01:41:25+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"10 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/giris-gatsby-ve-sayfalandirma-neden-onemli\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-gatsby-ve-sayfalandirma-neden-onemli\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Giri\u015f: Gatsby ve Sayfaland\u0131rma Neden \u00d6nemli?","datePublished":"2025-11-22T01:41:25+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-gatsby-ve-sayfalandirma-neden-onemli\/"},"wordCount":1547,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/giris-gatsby-ve-sayfalandirma-neden-onemli\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/giris-gatsby-ve-sayfalandirma-neden-onemli\/","url":"https:\/\/fatihsoysal.com\/blog\/giris-gatsby-ve-sayfalandirma-neden-onemli\/","name":"Giri\u015f: Gatsby ve Sayfaland\u0131rma Neden \u00d6nemli? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-22T01:41:25+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-gatsby-ve-sayfalandirma-neden-onemli\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/giris-gatsby-ve-sayfalandirma-neden-onemli\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/giris-gatsby-ve-sayfalandirma-neden-onemli\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Giri\u015f: Gatsby ve Sayfaland\u0131rma Neden \u00d6nemli?"}]},{"@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\/34794","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=34794"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34794\/revisions"}],"predecessor-version":[{"id":34795,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34794\/revisions\/34795"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34794"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34794"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34794"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}