Panduan Hexo SEO

cara melakukan SEO pada sebuah Hexo situs — Node.js static situs generator. Hexo outputs pure HTML so konten adalah dapat di-crawl pada pertama fetch, tetapi sitemaps, robots.txt, deskripsi meta, canonicals, data terstruktur, dan stable permalinks semua bergantung pada plugins dan config.

Pertama kali diterbitkan: 26 Jun 2026 · Terakhir diperbarui: 9 Agu 2026 · Advanced
Bahasa

Hexo adalah sebuah Node.js static situs generator: hexo generate compiles Markdown ke pure static HTML, so Googlebot membaca Anda penuh konten pada pertama fetch dengan Tidak JavaScript rendering queue. itu's crawlability floor — tetapi ini adalah tidak finished SEO. sebagian besar default themes ship Tidak sitemap, Tidak robots.txt, Tidak per-post deskripsi meta, Tidak canonical, dan Tidak data terstruktur; Anda tambahkan itu dengan _config.yml settings, front penting fields, theme edits, dan plugins (hexo-generator-sitemap, hexo-generator-robotstxt, hexo-generator-feed, hexo-abbrlink). big traps adalah sebuah wrong url: di _config.yml, date-based default permalink itu breaks tautan pada rename, dan auto-generated category/tag archives itu buat thin duplicate konten. untuk Baidu-facing situs, static output menghapus sebuah nyata crawling obstacle — though itu's tidak sebuah jaminan dari Baidu pengindeksan atau peringkat.

TL;DR — Hexo (hexo generate) emits pure static HTML, so Anda konten adalah di pertama byte dari respons — Tidak Web rendering Service, Tidak Wave 2 delay. itu’s crawlability floor, tidak finished SEO. Default themes ship Tidak sitemap, Tidak robots.txt, Tidak per-post deskripsi meta, Tidak canonical, dan Tidak data terstruktur; Anda tambahkan them melalui _config.yml, front penting, theme template edits, dan plugins (hexo-generator-sitemap, hexo-generator-robotstxt, hexo-generator-feed, hexo-abbrlink, hexo-indexnow). three traps itu sebenarnya bite: sebuah wrong url: di _config.yml breaks canonicals/sitemap/feed; date-based default permalink ties URLs untuk filenames so sebuah rename breaks tautan; dan auto-generated category/tag archives buat thin duplicate konten. untuk Baidu-facing situs static output adalah sebuah nyata advantage.

Hexo’s static output adalah crawling advantage

hexo generate berjalan Anda Markdown dan theme templates melalui sebuah bangun langkah dan menulis sebuah folder dari finished HTML, CSS, dan assets. SEO-relevant fact adalah ketika HTML ada: di bangun time, setelah, untuk everyone — tidak per permintaan, dan tidak di browser. Evidence for this claim The Hexo generate command builds static files into the configured public directory. Scope: Hexo generate command. Confidence: high · Verified: Hexo: Commands

Google mendeskripsikan sebuah dua-phase proses untuk JavaScript halaman: Wave 1 fetches mentah HTML dan indeks static konten immediately; Wave 2 adalah sebuah deferred headless-Chromium rendering queue itu dapat take seconds untuk days. Hexo output skips Wave 2 entirely — setiap halaman adalah mentah HTML pada pertama fetch. Google’s own guidance adalah blunt itu ini adalah recommended path: dynamic rendering adalah “a workaround dan tidak a long-term solution… gunakan server-side rendering, static rendering, atau hydration sebagai a solution,” (terjemahan) “sebuah workaround dan tidak sebuah panjang-istilah solusi… gunakan rendering sisi server, static rendering, atau hydration sebagai sebuah solusi,” dan Hexo produces static rendering, satu dari three explicitly recommended approaches.

Dua lebih wins fall out dari ini:

  • dapat di-crawl tautan oleh default. Hexo templates emit plain <a href> anchors di static HTML, so mereka satisfy Google’s requirement itu tautan menjadi nyata, dapat di-crawl URLs — Tidak JavaScript-generated navigation untuk design sekitar.
  • Cheap untuk crawl. Static files disajikan dari sebuah CDN memiliki effectively zero server-processing cost per permintaan, so Googlebot dapat crawl di -nya diizinkan rate tanpa tripping crawl-rate throttling. sebagai Gary Illyes put ini, “jika Anda adalah membuat expensive database calls, itu going untuk cost itu server a lot” (terjemahan) “jika Anda adalah membuat expensive database panggilan, itu’s going untuk cost server sebuah lot” — Hexo membuat none.

caveat: zero render-blocking untuk crawler adalah tidak yang sama sebagai zero render-blocking untuk pengguna. Theme JS/CSS masih memengaruhi Core Web Vitals (lebih di bawah).

Configure _config.yml pertama — url: adalah big satu

Set ini global keys sebelum Anda pertama deploy:

url: https://yourdomain.com       # must match your live domain, with https://
permalink: :title/                # or :year/:month/:day/:title/ (the default)
title: Site Title
description: Global meta description fallback
author: Your Name
language: en
meta_generator: false             # removes the <meta name="generator" content="Hexo"> tag
  • url: adalah single sebagian besar consequential setting. ini adalah situs’s configured base URL, yang themes dan generators dapat gunakan untuk tag canonical, feeds, sitemaps, dan pagination. sebuah wrong nilai dapat propagate ke itu outputs. Evidence for this claim Hexo's url configuration supplies the website URL used by themes and generators. Scope: Exact downstream fields depend on the installed theme and plugins. Confidence: high · Verified: Hexo: Configuration
  • permalink: — default :year/:month/:day/:title/ produces date-based URLs itu look stale di atas time dan tie slug untuk filename. Cleaner options adalah /:title/ atau /:category/:title/.
  • meta_generator: false strips Hexo’s generator fingerprint dari <head>.
  • Deploying untuk sebuah subdirectory? url: alone tidak cukup — set root: untuk subdirectory path too (e.g. root: /blog/). Hexo’s url_for helper membangun root-relative tautan, sementara full_url_for prepends penuh url: nilai; mendapatkan root: wrong pada sebuah subdirectory deploy dan tautan internal, feeds, dan sitemap entries end up pointing di domain root alih-alih sebenarnya path.
  • Config precedence: situs’s _config.yml sets base url/root/permalink nilai; sebuah theme’s own config (-nya bundled _config.yml, atau sebuah _config.<theme>.yml di project root) layers pada top untuk display dan template settings, tetapi tidak override situs-tingkat struktur URL — sebuah theme dapat’t perbaiki sebuah wrong url:.
  • Testing di safe mode? hexo server --safe (atau hexo --safe) disables setiap plugin dan script, so output Anda’re viewing adalah missing Anda sitemap, robots.txt, dan apa pun SEO plugin’s tags. jangan gunakan safe-mode preview untuk periksa SEO output — jalankan sebuah wajar hexo generate pertama.

Front penting SEO controls (dan apa missing)

Native Hexo front penting Anda dapat rely pada:

---
title: "Article Title for the <title> tag"
date: 2024-01-15
updated: 2024-06-01
tags: [tag1, tag2]
categories: [Category]
permalink: /custom-url/           # overrides the global pattern for this post
published: true
sitemap: false                    # exclude this post from sitemap.xml
---

Apa adalah tidak di native front penting dan perlu theme mendukung atau sebuah template edit:

  • description ( deskripsi meta) — sebagian besar themes jangan print ini tanpa sebuah patch.
  • keywords (per-post keyword meta) — dan largely pointless anyway; Google memiliki ignored <meta name="keywords"> since 2009. Treat keywords sebagai sebuah organizational aid, tidak sebuah peringkat lever.
  • canonical (override canonical URL) — theme-dependent.

pertahankan updated: field saat ini ketika Anda revise sebuah post — sitemap freshness bergantung pada ini (berikutnya bagian).

Essential plugins

Sitemap — hexo-generator-sitemap (official):

npm install hexo-generator-sitemap --save
sitemap:
  path:
    - sitemap.xml
  tags: true
  categories: true

ini membaca lastmod dari setiap post’s updated field (falling back untuk date) — yang penting karena Bing warns itu lastmod “seharusnya reflect itu benar terakhir modification time dari itu halaman konten, tidak itu sitemap file itself.” (terjemahan) “seharusnya reflect benar terakhir modification time dari halaman konten, tidak sitemap file itself.” setelah hexo generate, submit resulting sitemap.xml di Google Search Console dan Bing Webmaster alat. dan heed Bing’s lainnya warning: “Lakukan tidak submit a static sitemap dan forget it. New halaman tidak akan mendapatkan picked up” (terjemahan) “melakukan tidak submit sebuah static sitemap dan forget ini. baru halaman tidak akan mendapatkan picked up” — untuk Hexo itu berarti re-deploying dan re-submitting (atau menggunakan IndexNow) setelah setiap baru post.

robots.txt — hexo-generator-robotstxt:

npm install hexo-generator-robotstxt --save
robotstxt:
  useragent: "*"
  allow:
    - /
  disallow:
    - /private/
  sitemap: https://yourdomain.com/sitemap.xml

Tanpa ini, Hexo produces Tidak robots.txt di semua — Tidak sitemap pointer untuk crawler.

RSS — hexo-generator-feed: relevant untuk aggregators dan Google News eligibility; John Mueller mencakup sebuah RSS feed pada his own static situs.

IndexNow — hexo-indexnow: Bing recommends pairing sitemaps dengan IndexNow untuk nyata-time, URL-tingkat submission. Drop generated key file ke source/ so ini deploys sebagai yourdomain.com/<key>.txt. Note ini adalah untuk Bing, Yandex, dan others — tidak Google, yang tidak gunakan IndexNow untuk umum halaman.

default permalink memiliki dua SEO masalah: renaming Markdown file perubahan URL (karena slug muncul dari filename), dan non-Latin judul (Chinese, emoji) produce garbled URLs. hexo-abbrlink decouples URL dari filename oleh writing sebuah stable hash back ke front penting:

npm install hexo-abbrlink --save
permalink: posts/:abbrlink/
abbrlink:
  alg: crc32    # crc16 or crc32
  rep: hex      # dec or hex

Anda mendapatkan sesuatu like /posts/3a9c2b1d/ itu survives file renames, category perubahan, dan date edits. underlying aturan stands either cara: setelah sebuah URL adalah published, jangan perubahan ini tanpa sebuah 301 redirect — sebuah rename tanpa satu destroys tautan equity dan apa pun accumulated sinyal peringkat.

Dua lebih permalink pitfalls worth knowing sebelum Anda pick sebuah pattern:

  • jangan gunakan :id token. Hexo documents post IDs sebagai tidak persistent di seluruh sebuah database cache reset — jika Anda permalink pattern mencakup :id, sebuah cache rebuild dapat silently perubahan setiap post’s URL. Stick untuk :title, :abbrlink, atau lainnya stable token.
  • trailing_index dan trailing_html adalah terpisah controls, tidak satu setting. Hexo’s pretty_urls config toggles them independently — satu governs apakah sebuah trailing index.html adalah stripped dari generated tautan, lainnya apakah sebuah trailing slash adalah ditambahkan. jika ini jangan match bagaimana Anda host sebenarnya resolves URLs (beberapa hosts redirect /post untuk /post/, others jangan), Anda dapat end up dengan internal tautan, canonicals, dan sitemap entries disagreeing dengan URL server sebenarnya menyajikan.

Berikutnya theme SEO configuration

Berikutnya adalah paling-digunakan Hexo theme, configured di _config.next.yml:

canonical: true                 # builds canonical from url: + page path

webmaster_tools:
  google: VERIFICATION_STRING
  bing: VERIFICATION_STRING
  baidu: VERIFICATION_STRING

open_graph:
  enable: true
  twitter_card: summary_large_image

** Berikutnya meta-deskripsi kesenjangan:** Berikutnya melakukan tidak secara otomatis inject sebuah per-post <meta name="description"> dari front penting description:. Anda patch theme’s head template untuk fall back dari page.description untuk situs deskripsi. ini adalah single sebagian besar umum Berikutnya SEO miss. (Berikutnya melakukan mendukung canonical: true dan dibangun-di Open Graph / Twitter Cards, so itu setidaknya berfungsi setelah enabled.)

untuk non-Berikutnya themes, Anda biasanya buat atau edit sebuah head sebagian untuk emit og:title, og:description, og:image, og:url, dan twitter:card — mendukung varies widely oleh theme.

Siapa owns setiap tag ketika sebuah theme dan sebuah plugin keduanya emit ini. sebuah theme’s dibangun-di Open Graph/canonical mendukung dan sebuah semua-di-satu plugin like hexo-seo (yang generates -nya own breadcrumb, situs web, dan artikel schema) dapat keduanya try untuk tulis sama tag. Mengubah keduanya pada produces duplicate atau conflicting <meta> tags, canonicals, atau JSON-LD blocks di yang sama <head>. Pick satu layer sebagai owner untuk setiap tag category — theme atau plugin, tidak keduanya — dan disable corresponding fitur pada lainnya sebelum Anda ship.

Category dan tag halaman: duplicate-konten trap

Hexo auto-generates sebuah archive halaman untuk setiap category dan setiap tag, setiap filled dengan post excerpts itu juga muncul pada posts themselves. di scale itu’s hundreds dari thin halaman competing untuk yang sama kueri dan diluting crawl attention. Anda options:

  1. sitemap: false per archive (impractical di scale).
  2. Theme-tingkat noindex pada category/tag archive templates.
  3. pertahankan them terindeks hanya jika sebuah category adalah sebuah genuine, curated topic hub dengan nyata nilai.
  4. Self-referencing canonical pada setiap paginated archive halaman (halaman 2 canonicalizes untuk itself, tidak halaman 1).

Satu caveat pada option 2: panjang-istilah noindex eventually membuat Google berhenti berikut tautan pada itu halaman, so noindexing tag halaman dapat reduce crawling dari posts itu adalah hanya ditautkan dari itu tags. pastikan such posts adalah reachable beberapa lainnya cara.

Anda route inventory adalah bigger daripada source/. Category, tag, archive, dan pagination halaman jangan come dari Markdown files — Hexo’s generator API adalah apa sebenarnya membuat them, dan themes atau plugins dapat register mereka own generators too. itu berarti dapat di-crawl URL surface dapat silently expand beyond apa Anda’d expect dari browsing Anda source/ folder. setelah installing atau updating sebuah theme atau plugin, jalankan hexo generate dan diff route list di public/ alih-alih assuming Anda know setiap URL Hexo adalah producing.

data terstruktur / JSON-LD

Hexo injects Tidak data terstruktur oleh default. Either tambahkan sebuah BlogPosting JSON-LD block untuk Anda theme’s post template (headline, datePublished, dateModified, author, publisher, url) atau gunakan semua-di-satu plugin like hexo-seo itu generates breadcrumb, situs web, dan artikel schema untuk Anda.

Core Web Vitals

Static output adalah fast, tetapi themes dapat undo itu. Berikutnya dan banyak themes bundle besar JS/CSS dan icon-font libraries (Font Awesome adalah sebuah frequent LCP/render-blocking culprit). Audit dengan Lighthouse, lalu reach untuk hexo-all-minifier (HTML/CSS/JS compression di bangun time), hexo-lazyload-image, dan defer/async pada ketiga-party scripts like analytics dan ads.

Targeting Baidu (Chinese-audience situs)

Baidu’s crawler menangani JavaScript poorly, so Hexo’s static HTML menghapus satu obstacle untuk Baidu penemuan. tambahkan baidu_site_verification di Berikutnya, generate sebuah Baidu-format sitemap dengan hexo-generator-baidu-sitemap, dan push URLs actively dengan hexo-submit-urls-to-search-engine. Satu hosting note: GitHub halaman adalah blocked di mainland China — gunakan Gitee halaman, Cloudflare, atau sebuah Chinese CDN untuk Baidu traffic.

Treat itu sebagai sebuah crawlability advantage, tidak sebuah jaminan. Static HTML tidak oleh itself prove Baidu adalah discovering, pengindeksan, atau peringkat Anda halaman — konfirmasi sebenarnya crawl activity dan pengindeksan status secara langsung di Baidu Ziyuan (Baidu’s webmaster alat) rather daripada assuming static output alone secures visibilitas.

Deploying untuk GitHub halaman — SEO gotchas

  • Set url: untuk Anda langsung address (custom domain dengan https://) sebelum pertama deploy.
  • Put sebuah CNAME file di source/ untuk custom domains so ini tidak reset pada setiap hexo deploy.
  • Enforce HTTPS di repo Settings → halaman setelah DNS propagates.
  • Prefer sebuah GitHub tindakan workflow di atas hexo-deployer-git untuk hindari CNAME-reset issues.

Hexo vs. Hugo vs. Jekyll vs. Astro, untuk SEO

semua four ship pure static HTML, so indexability floor adalah identical — ada Tidak kerangka kerja-tingkat SEO disadvantage di Hexo. differences adalah operational: Hugo (Go) membangun far lebih cepat di besar scale dan memiliki sebuah dibangun-di sitemap; Jekyll adalah GitHub halaman default; Astro ships zero JS oleh default melalui islands. Hexo’s edge adalah sebuah rich npm plugin ecosystem dan sebuah besar Chinese-language community. konten quality, tidak generator, decides rankings — sebagai Mueller mengatakan dari switching generators, “Will your site’s SEO suddenly explode? No. Also No.” (terjemahan) “akan Anda situs’s SEO suddenly explode? Tidak. juga Tidak.”

untuk cluster overview dan lainnya generators, see Static situs Generators; untuk lebih luas rendering picture, see JavaScript SEO.

Add an expert note

Pin an expert quote

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