Türkçe çeviri: Jekyll SEO

nasıl -e optimize Jekyll siteler bençin arama — neden onun static HTML dır crawler-friendly tarafından default, plus jekyll-seo-tag ve jekyll-sitemap plugins, permalinks, collections, robots.txt, ve GitHub sayfalar plugin whitelist.

İlk yayın tarihi: 26 Haz 2026 · Son güncelleme: 8 Ağu 2026 · Advanced
Diller
Bu sayfada 1 kanıt sinyali

Jekyll outputs flat, static HTML — crawlers al complete bençerik on ilk fetch, ile no JavaScript rendering delay. bu nedenle SEO çalışması değildir fighting framework; o's configuration. Install jekyll-seo-tag (title, description, canonical, Open Graph, Twitter Card, JSON-LD) ve jekyll-sitemap (sitemap.xml), ve ayarla url: in _config.yml veya her ikisi produce broken output. seç temiz permalinks (/:title/, değil date-based) bençin evergreen bençerik. oluştur robots.txt yourself — Jekyll won't. Watch two GitHub sayfalar traps: plugin whitelist (yalnızca bir düzeltilmiş ayarla runs olmadan bir GitHub Actions oluştur) ve baseurl misconfiguration on project siteler, hangi breaks her canonical URL.

TL;DR — Jekyll emits flat static HTML at oluştur time, bu nedenle bençerik dır in raw response on ilk tarama — no Web Rendering Service, no Wave 2 delay. SEO çalışır dır configuration, değil architecture. Install jekyll-seo-tag (title, description, canonical, OG, Twitter Card, JSON-LD) ve jekyll-sitemap (sitemap.xml); her ikisi require url: in _config.yml veya onlar produce broken output. kullan temiz permalinks (/:title/) üzerinde date-based ones bençin evergreen bençerik. Two GitHub sayfalar traps dominate: plugin whitelist (GitHub builds ile --safe; non-whitelisted plugins ihtiyaç duy bir GitHub Actions oluştur) ve bir missing baseurl on project siteler, hangi breaks her generated canonical URL. GitHub sayfalar ayrıca pins specific plugin sürümler (3.10.0 temel, older jekyll-seo-tag/jekyll-sitemap releases), değil sadece hangi plugins çalıştır. Collections ihtiyaç duy output: true veya onlar’re never rendered. Drafts, future-dated posts, ve published: false belgeler dır excluded -den bir olağbir oluştur, ve --incremental dır experimental — yapmayın kullan o bençin production deploys. ve robots.txt değildir auto-generated — yap o yourself.

neden Jekyll’s static output dır good bençin SEO

Jekyll dır bir static site generator: o runs sizin Markdown ve Liquid templates aracılığıyla bir oluştur adım ve emits finished HTML, once, önce herhangi bir istek. şu timing dır whole SEO advantage. Evidence for this claim Jekyll processes text and templates into static files during a build. Scope: Jekyll build architecture. Confidence: high · Verified: Jekyll documentation

Google’s pipeline dır tarama → render → dizin, ve rendering JavaScript dır “bir separate adım” that sits in a queue — what people loosely call the “two-wave” süreç. Wave 1 fetches raw HTML ve indexes text ve bağlantılar immediately; Wave 2 queues sayfa bençin Web Rendering Service -e çalıştır JavaScript, “bir few seconds -e weeks” later depending on tarama bütçesi. ile Jekyll, Wave 1 zaten contains tümü sizin bençerik — orada’s no JavaScript required -e render body. Wave 1 = Wave 2. No rendering delay, no rendering budget spent. bu aynı argument şu yapar herhangi bir static site generator lowest-risk architecture bençin indexability.

downstream benefits izle:

  • Faster TTFB. Pre-oluşturulmuş files sunulan -den bir CDN (GitHub sayfalar sits behind Fastly; Netlify/Vercel sahip onların kendi edges) anlamına gel no database sorgular ve no server processing — good bençin LCP ve rest of temel Web Vitals.
  • No required JS payload bençin bençerik → daha iyi FCP ve LCP -den bir hydrating SPA.
  • Proper HTTP status codes at CDN layer, değil client-side error handling.

ama none of şu changes fundamentals: static siteler hâlâ ihtiyaç duy meta tags, sitemaps, canonical URLs, structured data, ve good bençerik. Jekyll’s output dır crawler-friendly; metadata dır on siz.

GitHub sayfalar ve Jekyll SEO

en çok yaygın Jekyll deployment dır GitHub sayfalar — push -e bir branch ile sayfalar enabled ve GitHub auto-builds site. şu convenience comes ile SEO-relevant constraints.

Project siteler vs. kullanıcı/org siteler — URL decision

  • username.github.io/repo-name (bir project site) lives on bir shared subdomain ile thousands of diğer unrelated siteler. o çalışır fine bençin docs, demos, ve personal projects nerede URL itself yapmaz ihtiyaç duy -e carry sizin brand.
  • bir custom domain (benşaret et bir CNAME at GitHub sayfalar) puts site on bir URL siz control, ile HTTPS auto-provisioned tarafından GitHub. bençin bir site nerede domain itself önem taşır — bir benşletme site, bir blog siz’re building bir audience yaklaşık — bir custom domain -den başla avoids bir domain migration later.

-erseniz expect -e move -e bir custom domain eventually, ayarla o up early. herhangi bir domain migration anlamına gelir 301 yönlendirmeler (jekyll-redirect-from handles bu) ve bir period nerede inbound bağlantılar ve herhangi bir accumulated sinyaller benşaret et at eski URL — avoidable churn -erseniz seç final domain up front yerine switching later. bu bir migration-planning argument, değil bir claim şu bir github.io subdomain dır penalized kendi başına.

baseurl — #1 canonical bug on project siteler

Project siteler live altında bir subfolder (/repo-name/). -erseniz yapmayın ayarla baseurl: /repo-name in _config.yml, her canonical URL jekyll-seo-tag generates — ve sizin benç bağlantılar — -ecek olmak yanlış, missing subfolder. bu tek en çok yaygın canonical-URL bug on Jekyll project siteler. (kullanıcı/org siteler sunulan at domain root yapmayın ihtiyaç duy baseurl.)

plugin whitelist

GitHub sayfalar runs Jekyll ile --safe flag ve yalnızca izin verir bir düzeltilmiş ayarla of plugins. Evidence for this claim GitHub Pages builds Jekyll in safe mode and supports a documented set of plugins. Scope: GitHub Pages hosted builds. Confidence: high · Verified: GitHub Pages: Jekyll plugins SEO-relevant whitelisted ones:

  • jekyll-seo-tag
  • jekyll-sitemap
  • jekyll-redirect-from ✓ (bençin 301s -dığınızda change URLs)
  • jekyll-paginate

değil whitelisted (ve silently won’t çalıştır, veya -ecek error):

  • jekyll-last-modified-at — gerekli bençin accurate sitemap <lastmod> -den file timestamps
  • Custom structured-data plugins
  • Anything dropped in bir _plugins/ folder

o’s değil sadece hangi plugins — o’s hangi sürümler

GitHub sayfalar yapmaz yalnızca restrict hangi plugins çalıştır; o pins exact sürüm of her bir, ve şu oluştur environment itself dır pinned -e bir older Jekyll. olarak of dependency liste’s son update, hosted oluştur runs Jekyll 3.10.0 ile jekyll-seo-tag 2.8.0, jekyll-sitemap 1.4.0, ve jekyll-feed 0.17.0 — -iken jekyllrb.com’s kendi docs describe güncel upstream release, 4.4.1. bir behavior documented in bir plugin’s latest README değildir guaranteed -e var ol in sürüm GitHub sayfalar aslında runs; kontrol et pages.github.com/versions.json bençin pinned sürüm önce relying on bir specific flag veya output. bir GitHub Actions oluştur sidesteps bu de — siz control Gemfile, bu nedenle siz al sürümler siz pin, değil GitHub’s.

GitHub Actions workaround

düzelt bençin whitelist değildir “add more gems” — o’s -e durdur letting GitHub yap oluştur. çalıştır Jekyll yourself in CI (actions/jekyll-build-pages, veya oluştur locally ve push _site/ -e deploy branch ile peaceiris/actions-gh-pages) ve whitelist no longer uygulanır. Now herhangi bir plugin runs, ve siz seç Jekyll ve plugin sürümler yerine inheriting GitHub’s pinned ayarla.

jekyll-seo-tag plugin

bu resmî, maintained plugin şu kapsar en çok of temel metadata Jekyll yapmaz ekle kendi başına. tam olarak ne o emits depends on hangi sürüm siz sahip installed, sizin _config.yml ve front önem taşır, ve whether sizin layout aslında çbirğrılar {% seo %} — GitHub sayfalar, bençin instance, pins bir specific sürüm yerine her zaman shipping latest release (daha on şu below). kontrol et advanced usage rehber bençin sizin sürüm’s exact output, ve yapğrula ne aslında landed tarafından grepping sizin kendi oluşturulmuş HTML yerine assuming o’s complete.

Install:

# Gemfile
gem 'jekyll-seo-tag'
# _config.yml
plugins:
  - jekyll-seo-tag
<!-- _layouts/default.html, before </head> -->
{% seo %}

ne o generates automatically:

  • <title> — sayfa title ile site name appended (Page Title | Site Name)
  • <meta name="description"> — -den description: front önem taşır veya site description
  • <link rel="canonical"> — oluşturulmuş -den site.url + page.url
  • Open Graph tags (og:title, og:description, og:url, og:site_name, og:image)
  • Twitter Card tags (twitter:card, twitter:title, twitter:description, twitter:creator, twitter:image)
  • JSON-LD structured data (BlogPosting bençin posts, WebSite bençin home sayfa)
  • sayfalama meta (sonraki/prev URLs)

Required _config.yml settings — olmadan bunlar plugin produces broken output:

title: Your Site Title
description: Your site description
url: "https://yourdomain.com"   # CRITICAL — drives canonical URL generation
author:
  name: Patrick Stox
  twitter: patrickstox
  url: https://patrickstox.com  # author disambiguation
twitter:
  username: patrickstox
  card: summary_large_image

Per-sayfa front önem taşır overrides:

---
title: "Jekyll SEO Guide"
description: "How to optimize Jekyll sites for search engines."
image:
  path: /assets/jekyll-seo-og.png
  width: 1200
  height: 630
  alt: "Jekyll SEO diagram"
canonical_url: "https://example.com/jekyll-seo/"  # override if needed
robots: noindex   # per-page noindex
seo:
  type: BlogPosting          # schema.org type override
  date_modified: 2025-01-15  # dateModified override for JSON-LD
---

Suppression (ne zaman sizin layout zaten outputs onun kendi):

{% seo title=false %}      <!-- suppress the <title> -->
{% seo canonical=false %}  <!-- suppress the canonical link -->

bir gotcha worth flagging: çok söyleıda minimal themes (dahil minima) ship olmadan jekyll-seo-tag wired in. Adding gem -e sizin Gemfile yapar nothing unless theme’s layout aslında çbirğrılar {% seo %}.

Sitemaps ile jekyll-sitemap

aynı install pattern (Gemfile + _config.yml). o generates bir sitemaps.org- compliant sitemap.xml at /sitemap.xml on her oluştur.

o requires url: in _config.yml — olmadan o, sitemap entries sahip no domain.

Controlling <lastmod>, in priority sıra:

  1. last_modified_at: in front önem taşır (en iyi — explicit control)
  2. Post creation date (fallback — çoğu zaman yanlış bençin evergreen bençerik updated later)
  3. Filesystem modification date (gerektirir non-whitelisted jekyll-last-modified-at)

en iyi practice: ekle last_modified_at: YYYY-MM-DD -e her post, ve bump o -dığınızda update bençerik — şu’s freshness sinyal recrawl prioritization leans on.

Excluding sayfalar:

# Per-page front matter
sitemap: false

# Global pattern (in _config.yml)
defaults:
  - scope:
      path: "assets/**/*.pdf"
    values:
      sitemap: false

Kalıcı bağlantı yapılandırması

Permalinks dır ayarla globally in _config.yml veya overridden per sayfa in front önem taşır.

StylePatternSEO notes
date (default)/:categories/:year/:month/:day/:title.htmlDate-heavy, fragile eğer post date changes
pretty/:categories/:year/:month/:day/:title/Trailing slash, no .html
none/:categories/:title.htmlNo date burial
Custom/:title/ veya /:categories/:title/en çok control — recommended bençin evergreen bençerik

Recommended bençin en çok siteler:

permalink: /:title/
# or
permalink: /:categories/:title/

neden kaçın date-based URLs bençin evergreen posts:

  • Changing bir post’s date: front önem taşır changes onun URL → inbound bağlantılar break.
  • Deep hierarchy (/2019/03/14/post-title/) buries bençerik bençin no neden.
  • (bençin news ve journalism, date URLs dır fine ve beklenen — bu bir per-context çbirğrı, değil bir universal kural.)

Collections ihtiyaç duy onların kendi permalink config:

collections:
  case_studies:
    output: true
    permalink: /case-studies/:name/

bir warning on changing patterns: once URLs dır dizine eklenmiş, switching permalink styles requires 301 yönlendirmeler (kullan jekyll-redirect-from). Skip yönlendirmeler ve siz break bağlantı değeri ve generate 404s in arama Console.

Collections ve SEO

Collections dır Jekyll’s custom bençerik types beyond posts ve sayfalar — docs sections, portfolio items, ekip members, durum studies, FAQs. Two requirements yap veya break onların SEO:

  1. output: true -meli olmak ayarla. olmadan o, collection belgeler dır never rendered olarak individual HTML files ve therefore -ebilir’t olmak dizine eklenmiş. bu bir silent dizine ekleme killer — bençerik vardır in sizin repo ama never olur bir crawlable sayfa.

    collections:
      docs:
        output: true          # REQUIRED for indexable pages
        permalink: /docs/:name/
  2. her belge gerektirir front önem taşır — hatta bir empty --- block. olmadan o, Jekyll treats file olarak bir binary static file: no Liquid processing, no metadata, no jekyll-seo-tag integration.

Note şu collections değildir included in RSS feeds (yalnızca posts dır). bençin büyük dokümantasyon siteler, collections dır genellikle yapğru structure anyway.

Publishing states ve incremental builds

Jekyll sahiptir several independent switches şu control ne aslında ends up in oluşturulmuş site. Mixing them up produces either sayfalar şu silently never al oluşturulmuş, veya draft/future bençerik şu ships -e production tarafından accident:

  • Drafts (_drafts/) dır excluded -den bir olağbir oluştur entirely. onlar yalnızca görün -dığınızda çalıştır bundle exec jekyll serve --drafts (veya build --drafts) locally — moving bir post -e _posts/ ile bir gerçek date dır ne aslında publishes o.
  • Future-dated posts (bir date: later -den güncel time) dır excluded tarafından default. future: true in _config.yml, veya --future flag, bençerir them — handy bençin local preview, ama leaving o on in bir production config anlamına gelir scheduled posts go live moment siz oluştur, değil on onların intended date.
  • published: false in front önem taşır excludes bir belge -den oluştur regardless of onun date — bir separate switch -den drafts ve future posts, ve easy -e leave ayarla sonra testing bir sayfa siz meant -e ship.
  • Incremental regeneration (--incremental) dır documented tarafından Jekyll olarak experimental, ve o tracks bir limited dependency graph — mainly bençerir ve layouts. bir sayfa şu iterates site.posts veya diğer collection data (bir tag dizin, bir archive, related-posts logic) -ebilir go stale altında --incremental olmadan Jekyll detecting şu underlying posts changed. yapmayın çalıştır o olarak part of bir production deploy; kullan bir full bundle exec jekyll build bençin anything siz’re pushing live.

önce trusting herhangi bir of bunlar, oluştur olmadan flags siz kullan locally (--drafts, --future, --incremental) ve yapğrula output in _site/ matches ne siz intend -e publish — safest default bençin bir deploy pipeline dır bir temiz, full, non-incremental oluştur.

Custom head partials ile Liquid

ne zaman jekyll-seo-tag değildir enough, siz oluştur sizin kendi _includes/head.html:

<head>
  <meta charset="UTF-8">
  <title>
    {% if page.title %}{{ page.title }} | {{ site.title }}
    {% else %}{{ site.title }}{% endif %}
  </title>
  <meta name="description" content="
    {%- if page.description -%}{{ page.description }}
    {%- elsif page.excerpt -%}{{ page.excerpt | strip_html | strip_newlines }}
    {%- else -%}{{ site.description }}
    {%- endif -%}">
  <link rel="canonical" href="{{ page.url | prepend: site.url }}">
  {% seo %}
</head>

Key Liquid filters bençin SEO:

  • | strip_html — removes tags -den bir auto-excerpt (essential bençin temiz descriptions)
  • | strip_newlines — removes line breaks -den excerpts
  • | truncate: 160 — bir optional template-side character cap, değil bir Google limit. Prefer bir authored, sayfa-specific description ve preview rendered snippet; fit varies tarafından sorgu, device, language, ve script.
  • | prepend: site.url — builds absolute URLs bençin canonical ve OG tags
  • | date_to_xmlschema — ISO 8601 dates bençin JSON-LD datePublished/dateModified
  • | default: fallback — fallback ne zaman bir variable dır nil

Custom JSON-LD beyond ne jekyll-seo-tag emits:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": {{ page.title | jsonify }},
  "datePublished": "{{ page.date | date_to_xmlschema }}",
  "dateModified": "{{ page.last_modified_at | default: page.date | date_to_xmlschema }}",
  "author": {
    "@type": "Person",
    "name": "{{ page.author.name | default: site.author.name }}",
    "url": "{{ page.author.url | default: site.author.url }}"
  }
}
</script>

robots.txt değildir auto-generated

Jekyll yapar değil oluştur robots.txt. siz yap o yourself in site root. bençer bir empty front-önem taşır block bu nedenle Liquid süreçler file (bu nedenle {{ site.url }} resolves):

---
---
User-agent: *
Allow: /

Sitemap: {{ site.url }}/sitemap.xml

olmadan bu, orada’s no sitemap reference in robots.txt — ve bazı crawlers kullan şu olarak bir discovery mechanism. (robots.txt controls tarama, değil dizine ekleme — bençin full picture see tarama.)

yaygın Jekyll SEO myths

“Jekyll handles SEO automatically.” static output dır crawler-friendly, ama metadata requires explicit setup. Default themes çoğu zaman ship ile no SEO tags at tümü.

“GitHub Pages is fine for SEO — it’s free.” GitHub sayfalar itself dır fine — static output dır crawler-friendly regardless of ana makine. catches dır plugin whitelist (ve specific sürümler o pins, değil sadece hangi plugins) ve, eğer sizin brand depends on URL, deciding on bir custom domain önce siz oluştur bir audience on github.io.

“Static sites don’t need sitemaps.” Google -ebilir bul sayfalar via bağlantılar, ama bir sitemap speeds discovery ve carries <lastmod> sinyaller. jekyll-sitemap yapar o trivial.

“Jekyll is dead.” o’s in mature maintenance mode — v4.4,1 shipped in January 2025. Minimal yeni features, ama maintained ve secure, ve GitHub sayfalar -ecek support o indefinitely. bençin simple blogs ve docs, o’s bir solid, boring choice.

“I can use any plugin on GitHub Pages.” No — --safe plus bir düzeltilmiş whitelist. düzelt dır GitHub Actions, değil daha gems.

nerede bu fits

Jekyll dır bir of six generators in static site generators küme — GitHub sayfalar default ve bir en çok developers meet ilk. bençin broader context on nasıl Google renders JavaScript ve -dığınızda aslında ihtiyaç duy o, see JavaScript SEO hub. oluştur-freshness discipline şu uygulanır -e her SSG — bir static site dır yalnızca olarak güncel olarak onun son oluştur — uygulanır -e Jekyll de: edits yapmayın ulaş arama motorları until siz rebuild ve redeploy.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.