Guide Hexo SEO
Comment faire SEO on a Hexo site — le Node.js static site generator. Hexo outputs pure HTML donc contenu est crawlable on le premier récupérer, mais sitemaps, robots.txt, meta descriptions, canonicals, données structurées, et stable permalinks tout depend on plugins et config.
Hexo est a Node.js static site generator: hexo generate compiles Markdown dans pure static HTML, donc Googlebot lit votre complet contenu on le premier récupérer avec aucun JavaScript rendu queue. c’est le crawlability floor — mais c’est pas finished SEO. La plupart par défaut themes ship aucun sitemap, aucun robots.txt, aucun per-post meta description, aucun canonical, et aucun données structurées; vous ajouter ceux avec _config.yml paramètres, front matter champs, theme edits, et plugins (hexo-generator-sitemap, hexo-generator-robotstxt, hexo-generator-feed, hexo-abbrlink). Le big traps sont a incorrect url: dans _config.yml, le date-based par défaut permalink que breaks liens on rename, et auto-generated category/balise archives que créer thin contenu dupliqué. Pour Baidu-facing sites, le static sortie supprime a réel exploration obstacle — though c’est pas a guarantee de Baidu indexation or classement.
TL;DR — Hexo construit votre blog dans plain HTML fichiers ahead de temps, donc Google voit votre contenu le moment il récupère une page — aucun waiting on JavaScript. c’est le facile partie. Le catch: Hexo ne fait pas ajouter a sitemap, a
robots.txt, meta descriptions, or balise canonicals on son propre. Vous turn ceux on avec a quelques plugins et config paramètres.
Ce que Hexo is
Hexo est a gratuit blogging framework construit on Node.js. Vous écrire posts dans Markdown,
exécuter hexo generate, et Hexo turns tout dans finished HTML fichiers. Vous upload
ceux fichiers à a host (GitHub Pages, Netlify, Cloudflare Pages, et donc on). Quand
Google or a lecteur requêtes une page, ils obtenir le complet HTML correct away — il y a
rien left pour le navigateur à construire. Preuve à l’appui de cette affirmation Hexo generates static site files from source content. Portée : Hexo static generation. Niveau de confiance : élevé · Vérifié : Hexo documentation
c’est great pour le SEO: votre texte et liens sont dans lune page depuis le premier byte, donc Google ne fait pas ont à exécuter quelconque JavaScript à trouver votre contenu. Hexo sits dans le même family as Hugo et Jekyll — tout de les pre-construire tout (voir Static Site Generators).
Ce que Hexo fait pas do pour vous
Here’s où beginners obtenir caught: a fresh Hexo site with a par défaut theme is manquant la plupart basic SEO pieces. Vous usually have to ajouter:
- An XML sitemap — install le
hexo-generator-sitemapplugin. Preuve à l’appui de cette affirmation The official Hexo sitemap generator creates sitemap.xml output. Portée : hexo-generator-sitemap plugin. Niveau de confiance : élevé · Vérifié : Hexo sitemap generator - A
robots.txt— installhexo-generator-robotstxt(or drop a fichier dans votre source folder). - Meta descriptions — ajouter a
description:à chaque post, et la plupart themes besoin a petit template edit à en réalité print il. - Balise canonicals — theme-dependent; le popular Suivant theme peut faire il une fois vous définir choses up.
The two settings que matter la plupart avant vous launch
In votre _config.yml fichier:
url:doit être définir à votre réel actif adresse avechttps://(Par exemplehttps://yourdomain.com). Obtenir ce incorrect et votre sitemap, canonical, et feed liens tout point à le incorrect placer.permalink:contrôle votre URL modèle. Le par défaut puts le date dans chaque URL. Nombreux personnes préférer a cleaner:title/. Whatever vous pick, ne pas modifier a post’s URL plus tard sans a redirection — il breaks liens et loses classement signaux.
The chose la plupart personnes obtenir incorrect
“c’est static HTML, donc SEO est automatic.” Aucun. Static HTML signifie Google peut explorer votre contenu easily — c’est a head commencer, pas a finish line. Vous encore besoin le sitemap, le meta descriptions, le balise canonicals, et bon contenu. Le static partie simplement signifie vous ne va pas ont le JavaScript indexation problèmes que unique-page apps ont.
Vouloir le complet version — chaque plugin, le Suivant theme corrections, le category/balise duplicate-contenu trap, données structurées, et Baidu targeting? Switch à le Avancé tab.
TL;DR — Hexo (
hexo generate) emits pure static HTML, donc votre contenu est dans le premier byte de la réponse — aucun Web Rendu Service, aucun Wave 2 delay. c’est le crawlability floor, pas finished SEO. Par défaut themes ship aucun sitemap, aucun robots.txt, aucun per-post meta description, aucun canonical, et aucun données structurées; vous ajouter les via_config.yml, front matter, theme template edits, et plugins (hexo-generator-sitemap,hexo-generator-robotstxt,hexo-generator-feed,hexo-abbrlink,hexo-indexnow). Le three traps que en réalité bite: a incorrecturl:dans_config.ymlbreaks canonicals/sitemap/feed; le date-based par défaut permalink ties URLs à filenames donc a rename breaks liens; et auto-generated category/balise archives créer thin contenu dupliqué. Pour Baidu-facing sites le static sortie est a réel advantage.
Hexo’s static output is the exploration advantage
hexo generate exécute votre Markdown et theme templates via a construire étape et écrit
a folder de finished HTML, CSS, et assets. Le SEO-pertinent fact est quand le HTML
exists: à construire temps, une fois, pour everyone — pas per requête, et pas dans le navigateur. Preuve à l’appui de cette affirmation The Hexo generate command builds static files into the configured public directory. Portée : Hexo generate command. Niveau de confiance : élevé · Vérifié : Hexo: Commands
Google décrit a deux-phase traiter pour JavaScript pages: Wave 1 récupère le raw HTML et indexes static contenu immédiatement; Wave 2 est a deferred headless-Chromium rendu queue que peut prendre seconds à days. Hexo sortie skips Wave 2 entirely — chaque page est raw HTML on le premier récupérer. Google’s propre guidance est blunt que ce est le recommended chemin: dynamic rendu était “a workaround et pas a à long terme solution… utiliser rendu côté serveur, static rendu, or hydration as a solution,” et Hexo produces static rendu, un de le three explicitly recommended approaches.
Two plus wins fall out of ce:
«- Crawlable links by default. Hexo templates emit plain <a href> anchors in
static HTML, so they satisfy Google’s requirement that links be real, crawlable
URLs — no JavaScript-generated navigation to design around.
» (Traduction) (Résumé en français de la section vingt-trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Cheap to crawl. Static files served from a CDN have effectively zero
server-processing cost per request, so Googlebot can crawl at its allowed rate
without tripping crawl-rate throttling. As Gary Illyes put it, “if you are making
expensive database calls, that’s going to cost the server a lot” — Hexo makes none.
» (Traduction) (Résumé en français de la section vingt-trois, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
Le caveat: zero rendre-blocking pour robots d’exploration n’est pas le même as zero rendre-blocking pour utilisateurs. Theme JS/CSS encore affecte Core Web Vitals (plus ci-dessous).
Configurer _config.yml premier — url: is the big un
Définir ces global keys avant votre premier 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"> tagurl:est le unique la plupart consequential paramètre. c’est le site’s configuré base URL, qui themes et generators peut utiliser pour balise canonicals, feeds, sitemaps, et pagination. A incorrect valeur peut propagate dans ceux outputs. Preuve à l’appui de cette affirmation Hexo's url configuration supplies the website URL used by themes and generators. Portée : Exact downstream fields depend on the installed theme and plugins. Niveau de confiance : élevé · Vérifié : Hexo: Configurationpermalink:— le par défaut:year/:month/:day/:title/produces date-based URLs que regarder stale over temps et tie le slug à le filename. Cleaner options sont/:title/or/:category/:title/.meta_generator: falsestrips Hexo’s generator fingerprint depuis<head>.- Deploying à a subdirectory?
url:alone n’est pas suffisant — définirroot:à le subdirectory chemin aussi (e.g.root: /blog/). Hexo’surl_forhelper construit root-relative liens, pendant quefull_url_forprepends le completurl:valeur; obtenirroot:incorrect on a subdirectory deploy et lien internes, feeds, et sitemap entries fin up pointing à le domain root au lieu de le réel chemin. - Config precedence: le site’s
_config.ymlsets le baseurl/root/permalinkvaleurs; a theme’s propre config (son bundled_config.yml, or a_config.<theme>.ymlà le project root) layers on top pour afficher et template paramètres, mais ne fait pas override le site-level Structure d’URL — a theme ne peut pas corriger a incorrecturl:. - Testing dans sûr mode?
hexo server --safe(orhexo --safe) disables chaque plugin et script, donc le sortie vous êtes viewing est manquant votre sitemap, robots.txt, et quelconque SEO plugin’s balises. ne pas utiliser a sûr-mode preview à vérifier SEO sortie — exécuter a normalhexo generatepremier.
Front matter SEO contrôle (and what’s manquant)
Native Hexo front matter vous pouvez rely on:
---
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
---Ce que is pas in native front matter and nécessite theme prise en charge or a template edit:
description(le meta description) — la plupart themes ne pas print il sans a patch.keywords(per-post mot-clé meta) — et largely pointless anyway; Google a ignored<meta name="keywords">since 2009. Treatkeywordsas an organizational aid, pas a classement lever.canonical(override l’URL canonique) — theme-dependent.
Garder the updated: field current quand vous revise a post — sitemap freshness dépend
on it (suivant section).
Essential plugins
Sitemap — hexo-generator-sitemap (official):
npm install hexo-generator-sitemap --savesitemap:
path:
- sitemap.xml
tags: true
categories: trueIl lit lastmod depuis chaque post’s updated champ (falling back à date) — qui
matters parce que Bing warns que lastmod “devrait reflect le vrai dernier modification
temps de lune page contenu, pas le sitemap fichier itself.” Après hexo generate, submit
le résultating sitemap.xml dans la recherche Google Console et Bing Webmaster Outils. Et
heed Bing’s autre warning: “Ne faites pas submit a static sitemap et forget il. Nouveau pages
ne va pas obtenir picked up” — pour Hexo que signifie re-deploying et re-submitting (or en utilisant
IndexNow) après chaque nouveau post.
robots.txt — hexo-generator-robotstxt:
npm install hexo-generator-robotstxt --saverobotstxt:
useragent: "*"
allow:
- /
disallow:
- /private/
sitemap: https://yourdomain.com/sitemap.xmlSans it, Hexo produces aucun robots.txt at tout — aucun sitemap pointer pour robots d’exploration.
RSS — hexo-generator-feed: pertinent pour aggregators et Google News eligibility;
John Mueller inclut an RSS feed on his propre static site.
IndexNow — hexo-indexnow: Bing recommends pairing sitemaps avec IndexNow pour
en temps réel, URL-level submission. Drop le generated clé fichier dans source/ donc il
deploys as yourdomain.com/<key>.txt. Remarque ce est pour Bing, Yandex, et others —
pas Google, qui ne fait pas utiliser IndexNow pour general pages.
Permalink stability — le abbrlink corriger
Le par défaut permalink a deux SEO problèmes: renaming le Markdown fichier changements l’URL
(parce que le slug comes depuis le filename), et non-Latin titles (Chinese, emoji)
produce garbled URLs. hexo-abbrlink decouples l’URL depuis le filename par writing a
stable hash back dans front matter:
npm install hexo-abbrlink --savepermalink: posts/:abbrlink/
abbrlink:
alg: crc32 # crc16 or crc32
rep: hex # dec or hexVous obtenir quelque chose comme /posts/3a9c2b1d/ que survives fichier renames, category
changements, et date edits. Le underlying règle stands soit façon: une fois une URL est
publié, ne pas modifier il sans a 301 redirection — a rename sans un destroys
popularité des liens et quelconque accumulated classement signaux.
Two plus permalink pitfalls worth knowing avant vous pick a pattern:
- ne pas utiliser le
:idtoken. Hexo documents post IDs as pas persistent à travers a database cache reset — si votre permalink modèle inclut:id, a cache rebuild peut silently modifier chaque post’s URL. Stick à:title,:abbrlink, or un autre stable token. trailing_indexettrailing_htmlsont séparé contrôle, pas un paramètre. Hexo’spretty_urlsconfig toggles les independently — un governs si a trailingindex.htmlest stripped depuis generated liens, le autre si a trailing slash est ajouté. Si ces ne pas match comment votre host en réalité resolves URLs (some hosts redirection/postà/post/, others ne pas), vous pouvez fin up avec internal liens, canonicals, et sitemap entries disagreeing avec l’URL le serveur en réalité sert.
Suivant theme SEO configuration
Suivant is the most-used Hexo theme, configuré in _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_imageLe Suivant meta-description gap: Suivant ne fait pas automatiquement inject a per-post
<meta name="description"> depuis le front matter description:. Vous patch le theme’s
head template à fall back depuis page.description à le site description. Ce est le
unique la plupart courant Suivant SEO miss. (Suivant fait prise en charge canonical: true et built-dans
Ouvrir Graph / Twitter Cards, donc ceux au moins fonctionner une fois enabled.)
Pour non-NexT themes, vous usually créer or edit a head partial to emit og:title,
og:description, og:image, og:url, and twitter:card — prise en charge varies widely by
theme.
Qui owns chaque balise quand a theme et a plugin les deux emit il. A theme’s built-dans
Ouvrir Graph/canonical prise en charge et an tous-dans-un plugin comme hexo-seo (qui
generates son propre breadcrumb, site web, et article schema) peut les deux essayer à écrire le
même balise. Turning les deux on produces duplicate or conflicting <meta> balises, canonicals,
or JSON-LD bloque dans le même <head>. Pick un couche as le owner pour chaque balise
category — theme or plugin, pas les deux — et disable le corresponding fonctionnalité on le
autre avant vous ship.
Category et balise pages: le duplicate-contenu trap
Hexo auto-generates an archive page pour chaque category et chaque balise, chaque filled avec post excerpts que aussi apparaître on le posts themselves. À scale c’est hundreds de thin pages competing pour le même requêtes et diluting explorer attention. Votre options:
sitemap: falseper archive (impractical à scale).- Theme-level
noindexon le category/balise archive templates. - Garder les indexé seulement si a category est a genuine, curated topic hub avec réel valeur.
- Self-referencing canonical on chaque paginated archive page (page 2 canonicalizes à itself, pas page 1).
Un caveat on option 2: à long terme noindex eventually rend Google arrêter suivant le
liens on que page, donc noindexing balise pages peut reduce exploration de posts que sont seulement
lié depuis ceux balises. Assurez-vous tel posts sont reachable some autre façon.
Votre route inventory est bigger que source/. Category, balise, archive, et
pagination pages ne pas come depuis Markdown fichiers — Hexo’s generator API est ce que
en réalité crée les, et themes or plugins peut register leur propre generators aussi.
Que signifie le crawlable URL surface peut silently expand au-delà ce que vous’d expect
depuis browsing votre source/ folder. Après installing or updating a theme or plugin,
exécuter hexo generate et diff le route liste dans public/ plutôt que assuming vous
know chaque URL Hexo est producing.
Données structurées / JSON-LD
«Hexo injects no structured data by default. Either add a BlogPosting JSON-LD block to
your theme’s post template (headline, datePublished, dateModified, author,
publisher, url) or use an all-in-one plugin like hexo-seo that generates
breadcrumb, website, and article schema for you.
» (Traduction) (Résumé en français de la section soixante-six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Core Web Vitals
Static sortie est rapide, mais themes peut undo que. Suivant et nombreux themes bundle grand
JS/CSS et icon-font libraries (Font Awesome est a frequent LCP/rendre-blocking
culprit). Audit avec Lighthouse, alors reach pour hexo-all-minifier (HTML/CSS/JS
compression à construire temps), hexo-lazyload-image, et defer/async on tiers
scripts comme analytics et ads.
Targeting Baidu (Chinese-audience sites)
Baidu’s robot d’exploration handles JavaScript poorly, donc Hexo’s static HTML supprime un obstacle
à Baidu discovery. Ajouter baidu_site_verification dans Suivant, generate a Baidu-format
sitemap avec hexo-generator-baidu-sitemap, et push URLs actively avec
hexo-submit-urls-to-search-engine. Un hosting remarque: GitHub Pages est bloqué dans
mainland China — utiliser Gitee Pages, Cloudflare, or a Chinese CDN pour Baidu trafic.
Treat que as a crawlability advantage, pas a guarantee. Static HTML doesn’t by itself prove Baidu is discovering, indexation, or ranking votre pages — confirmer réel explorer activity and indexation status directement in Baidu Ziyuan (Baidu’s webmaster outils) plutôt que assuming static output alone secures visibility.
Deploying à GitHub Pages — le SEO gotchas
- Définir
url:à votre actif adresse (custom domain avechttps://) avant le premier deploy. - Put a
CNAMEfichier danssource/pour custom domains donc il n’est pas reset on chaquehexo deploy. - Enforce HTTPS dans repo Paramètres → Pages après DNS propagates.
- Préférer a GitHub Actions workflow over
hexo-deployer-gità éviter CNAME-reset problèmes.
Hexo vs. Hugo vs. Jekyll vs. Astro, pour le SEO
«All four ship pure static HTML, so the indexability floor is identical — there’s no framework-level SEO disadvantage in Hexo. The differences are operational: Hugo (Go) builds far faster at large scale and has a built-in sitemap; Jekyll is the GitHub Pages default; Astro ships zero JS by default via islands. Hexo’s edge is a rich npm plugin ecosystem and a large Chinese-language community. Content quality, not the generator, decides rankings — as Mueller said of switching generators, “Will your site’s SEO suddenly explode? No. Also No.” » (Traduction) (Résumé en français de la section soixante-quinze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Pour le cluster overview et le autre generators, voir Static Site Generators; pour le broader rendu picture, voir JavaScript SEO.
AI summary
A condensed prendre on the Avancé version:
- Hexo est a Node.js static site generator.
hexo generateoutputs pure static HTML, donc contenu est dans le premier byte de la réponse — aucun Web Rendu Service, aucun Wave 2 rendu-queue delay. Crawlable<a href>liens et cheap-à-explorer CDN fichiers come gratuit. - Static HTML est le crawlability floor, pas finished SEO. Par défaut themes ship aucun sitemap, aucun robots.txt, aucun per-post meta description, aucun canonical, et aucun données structurées.
- Configurer
_config.ymlpremier.url:est le la plupart consequential paramètre — il feeds canonicals, sitemap, RSS, et pagination; a incorrect valeur breaks tout de les. Subdirectory deploys aussi besoinroot:définir. Pick a cleanpermalink:(éviter le:idtoken — il n’est pas persistent à travers a cache reset) et définirmeta_generator: false. A theme’s propre config ne peut pas override le site-levelurl/root/permalink, et a sûr-mode preview (--safe) disables chaque plugin et script, donc ne pas vérifier SEO sortie là. - Plugins faire le heavy lifting:
hexo-generator-sitemap(litlastmoddepuis leupdatedchamp),hexo-generator-robotstxt,hexo-generator-feed,hexo-indexnow(Bing/Yandex, pas Google),hexo-abbrlinkpour stable permalinks. - Suivant theme: prend en charge canonical + Ouvrir Graph, mais fait pas auto-print a per-post meta description — a template patch est le la plupart courant corriger. Si a theme et an SEO plugin peut les deux emit le même balises, enable seulement un per balise category à éviter duplicates.
- Three traps: incorrect
url:; le date-based par défaut permalink que breaks liens on rename (jamais modifier une URL sans a 301); et auto-generated category/balise archives que créer thin contenu dupliqué (noindex or canonicalize). Ceux archive/balise/ pagination routes come depuis Hexo’s generator API, passource/fichiers — a theme/plugin mettre à jour peut silently expand le indexable URL surface, donc diffpublic/après changements. - Baidu: static sortie supprime a réel obstacle (Baidu’s robot d’exploration handles JS poorly), mais c’est a crawlability advantage, pas a guarantee de indexation or classement — confirmer dans Baidu Ziyuan. GitHub Pages est bloqué dans China — utiliser Gitee/Cloudflare/a Chinese CDN.
- Vs. Hugo/Jekyll/Astro: même indexability floor; Hexo’s edge est le npm plugin ecosystem et Chinese community. Qualité du contenu decides rankings, pas le generator.
Documentation officielle
Primary-source documentation — depuis Hexo, le moteur de recherches, et le clé plugins.
Hexo
- Hexo documentation — le framework overview.
- Configuration —
url,permalink,meta_generator, et le rest de_config.yml. - Permalinks — URL modèle variables et tradeoffs.
- Front matter — le per-post champs Hexo prend en charge natively.
- GitHub Pages deployment — le official deploy guide.
«Plugins » (Traduction) (Résumé en français de la section quatre-vingt-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- hexo-generator-sitemap — the official sitemap plugin. » (Traduction) (Résumé en français de la section quatre-vingt-sept, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- hexo-abbrlink — stable hash-based permalinks. » (Traduction) (Résumé en français de la section quatre-vingt-sept, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.) «- NexT theme SEO settings — canonical, webmaster verification, Open Graph. » (Traduction) (Résumé en français de la section quatre-vingt-sept, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)
«Search engines — rendering, links, sitemaps
» (Traduction) (Résumé en français de la section quatre-vingt-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- JavaScript SEO basics — the crawl → render → index phases a static build lets you skip for content.
» (Traduction) (Résumé en français de la section quatre-vingt-huit, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Dynamic rendering (deprecated) — Google recommending static rendering instead.
» (Traduction) (Résumé en français de la section quatre-vingt-huit, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Make your links crawlable — the <a href> requirement Hexo satisfies by default.
» (Traduction) (Résumé en français de la section quatre-vingt-huit, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)
«- SEO Guide for Web Developers — titles, descriptions, canonicals, sitemaps, structured data.
» (Traduction) (Résumé en français de la section quatre-vingt-huit, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Bing — Keeping Content Discoverable with Sitemaps — XML preference, lastmod accuracy, and IndexNow.
» (Traduction) (Résumé en français de la section quatre-vingt-huit, sous-partie six : le texte source est conservé pour vérification lors de la relecture francophone.)
«## Quotes from the source » (Traduction) (Résumé en français de la section quatre-vingt-onze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«On-the-record statements from Google, Bing, and John Mueller that bear directly on a Hexo (static) site. » (Traduction) (Résumé en français de la section quatre-vingt-douze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Google — static rendering is the recommended path » (Traduction) (Résumé en français de la section quatre-vingt-treize, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- “Dynamic rendering was a workaround and not a long-term solution for problems with JavaScript-generated content in search engines… Instead, we recommend that you use server-side rendering, static rendering, or hydration as a solution.” — Hexo produces static rendering. Source » (Traduction) (Résumé en français de la section quatre-vingt-quatorze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- “Server-side or pre-rendering is still a great idea because it makes your website faster for users and crawlers, and not all bots can run JavaScript.” Source » (Traduction) (Résumé en français de la section quatre-vingt-quatorze, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«Bing — sitemaps and freshness » (Traduction) (Résumé en français de la section quatre-vingt-quinze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- “XML remains the preferred format for sitemaps” — because it supports structured metadata like lastmod for freshness assessment.
Source
» (Traduction) (Résumé en français de la section quatre-vingt-seize, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- On lastmod: it “should reflect the true last modification time of the page content, not the sitemap file itself.” — the Hexo gotcha that the updated field must be kept current.
Source
» (Traduction) (Résumé en français de la section quatre-vingt-seize, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«- “By combining sitemaps for comprehensive site coverage with IndexNow for fast, URL-level submission, you provide the strongest foundation for keeping your content fresh, discoverable, and visible.”
Source
» (Traduction) (Résumé en français de la section quatre-vingt-seize, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
Gary Illyes, Google — static sites sont cheap à explorer
«- “If you are making expensive database calls, that’s going to cost the server a lot.” — static HTML from a CDN makes none. Coverage » (Traduction) (Résumé en français de la section quatre-vingt-dix-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
John Mueller — switching generators n’est pas itself an SEO win
- “Va ce modifier comment votre site appears dans tous moteurs de recherche? Va votre site’s SEO suddenly explode? Aucun. Aussi Aucun.” — qualité du contenu, pas le generator choice, drives rankings. Source
Hexo SEO checklist
A réussir to confirmer a Hexo site is search-friendly — la plupart of ces are off by par défaut:
-
url:dans_config.ymlest votre actif domain avechttps://(pas a placeholder, pashttp://). Deploying à a subdirectory?root:est définir aussi. - A permalink modèle est choisi et ne va pas churn — ideally
:title/orhexo-abbrlinkpour stable hashes. Le:idtoken n’est pas utilisé (il n’est pas persistent à travers a database cache reset). - Si les deux a theme et an SEO plugin peut emit canonical/OG/JSON-LD balises, exactly un de les est enabled pour chaque balise category — pas les deux.
-
meta_generator: falsedéfinir à drop le Hexo fingerprint (optional mais tidy). -
hexo-generator-sitemapinstalled;sitemap.xmlgenerates et est submitted dans Recherche Google Console et Bing Webmaster Outils. -
updated:front matter est kept actuel donc sitemaplastmodest précis. -
hexo-generator-robotstxtinstalled (or a manualrobots.txtdanssource/) avec le sitemap pointer. - Chaque post a a
description:, et le theme en réalité prints<meta name="description">(patch Suivant si nécessaire). - Balise canonicals sont emitted et resolve à actif HTTPS URLs (Suivant:
canonical: true). - Ouvrir Graph / Twitter Card balises présent (Suivant built-dans, or a head-partiel edit).
-
BlogPostingJSON-LD ajouté (template extrait orhexo-seoplugin). - Category/balise archives handled — noindexed, canonicalized, or kept seulement as réel topic hubs (pas left as thin duplicates).
- Paginated archive pages self-canonicalize (page 2 → page 2, pas page 1).
- Theme JS/CSS audited dans Lighthouse; minifier + lazy-charger image plugins considéré.
- GitHub Pages:
CNAMEdanssource/, HTTPS enforced, deploy via Actions à éviter CNAME reset. - Baidu sites: pas on GitHub Pages; Baidu verification + Baidu sitemap + URL push configuré.
- Aucun URL ever modifié sans a 301 redirection dans placer.
Hexo SEO — cheat sheet
On by par défaut vs. vous doit ajouter it
| SEO fonctionnalité | Hexo par défaut | How to obtenir it |
|---|---|---|
| Static HTML / crawlable content | Yes | hexo generate |
Crawlable <a href> liens | Yes | theme templates |
| XML sitemap | Aucun | hexo-generator-sitemap |
| robots.txt | Aucun | hexo-generator-robotstxt or manual fichier |
| RSS feed | Aucun | hexo-generator-feed |
| Per-post meta description | Aucun (theme-dependent) | description: + theme patch |
| Balise canonical | Aucun (theme-dependent) | Suivant canonical: true |
| Ouvrir Graph / Twitter Card | Aucun (theme-dependent) | Suivant built-in or head-partial edit |
| Données structurées (JSON-LD) | Aucun | template snippet or hexo-seo plugin |
| Stable permalinks | Aucun (date/filename fondé) | hexo-abbrlink |
| IndexNow submission | Aucun | hexo-indexnow (Bing/Yandex, pas Google) |
Clé _config.yml settings
| Paramètre | Pourquoi c’est important |
|---|---|
url: | Base pour canonical, sitemap, RSS, pagination — incorrect valeur breaks tout de les |
root: | Subdirectory chemin pour a subdirectory deploy — requis alongside url: or root-relative liens break |
permalink: | Par défaut est date-based; :title/ est cleaner; jamais modifier après publishing; éviter le non-persistent :id token |
meta_generator: false | Supprime le <meta name="generator" content="Hexo"> balise |
Plugin install commands
npm install hexo-generator-sitemap --save
npm install hexo-generator-robotstxt --save
npm install hexo-generator-feed --save
npm install hexo-abbrlink --save
npm install hexo-indexnow --saveRapide facts
- Hexo sortie skips Google’s Wave 2 rendu queue — contenu est dans le premier récupérer.
lastmodcomes depuis leupdatedchamp (falls back àdate) — garder il actuel.<meta name="keywords">est ignored par Google (since 2009) — organizational seulement.- Category/balise archives sont auto-generated et thin → noindex or canonicalize.
- Baidu ne peut pas explorer JS bien → static Hexo est an advantage, mais GitHub Pages est bloqué dans China.
Construire, serve, and vérifier a Hexo site
Le basic Hexo construire loop est le même everywhere; le shell differs.
macOS / Linux
# install dependencies and the SEO plugins
npm install
npm install hexo-generator-sitemap hexo-generator-robotstxt hexo-generator-feed --save
# clean stale output, then build the static HTML
npx hexo clean && npx hexo generate
# preview locally before deploying
npx hexo server
# confirm the sitemap and robots.txt were actually generated
ls public/sitemap.xml public/robots.txtWindows (PowerShell)
# install dependencies and the SEO plugins
npm install
npm install hexo-generator-sitemap hexo-generator-robotstxt hexo-generator-feed --save
# clean stale output, then build the static HTML
npx hexo clean; npx hexo generate
# preview locally before deploying
npx hexo server
# confirm the sitemap and robots.txt were actually generated
Get-ChildItem public\sitemap.xml, public\robots.txtConfirmer content is in the raw HTML (pas JS-rendered)
Le entier point de Hexo est que contenu est déjà dans le HTML. Vérifier il par checking que votre post texte apparaît dans le raw réponse, avant quelconque JavaScript exécute.
macOS / Linux
# fetch the raw HTML and search for a phrase from your post body
curl -s https://yourdomain.com/your-post/ | grep -i "a sentence from your post"
# confirm the canonical tag points at the live HTTPS URL
curl -s https://yourdomain.com/your-post/ | grep -i 'rel="canonical"'Windows (PowerShell)
# fetch the raw HTML and search for a phrase from your post body
(Invoke-WebRequest https://yourdomain.com/your-post/).Content | Select-String "a sentence from your post"
# confirm the canonical tag points at the live HTTPS URL
(Invoke-WebRequest https://yourdomain.com/your-post/).Content | Select-String 'rel="canonical"'Si le phrase montre up dans curl/Invoke-WebRequest sortie, c’est dans le static HTML
et Google voit il on Wave 1 — exactly ce que vous vouloir.
Outils pour Hexo SEO
Hexo plugins (le SEO toolkit)
- hexo-generator-sitemap — le official XML sitemap generator; lit
lastmoddepuis leupdatedchamp. - hexo-generator-robotstxt — generates
robots.txtavec a sitemap pointer. - hexo-generator-feed — RSS/Atom feed pour aggregators et Google News eligibility.
- hexo-abbrlink — stable, hash-based permalinks que survive fichier renames.
- hexo-indexnow / hexo-submit-urls-à-recherche-moteur — push modifié URLs à Bing (IndexNow) et Baidu respectively.
- hexo-tous-minifier / hexo-lazyload-image — Core Web Vitals helpers.
- hexo-seo — tous-dans-un option avec structured-données generation.
Testing et monitoring
- Recherche Google Console — submit le sitemap, inspect URLs, watch indexation.
- Bing Webmaster Outils — submit le sitemap, configurer IndexNow, exécuter Site Scan.
- Baidu Webmaster (Ziyuan) — verification et URL push pour Chinese-public sites.
- Lighthouse / PageSpeed Insights — audit theme JS/CSS pour Core Web Vitals regressions.
- View Source / curl — confirmer contenu, canonical, et meta description sont dans le raw HTML (voir le Scripts tab).
Hexo SEO mistakes to éviter
Concrete mistakes personnes en réalité faire quand ils définir up or migrate a Hexo site — prevention, pas diagnosis (voir the Troubleshooting tab pour que).
Leaving url: as le placeholder or on http://
Publishing avec url: http://yoursite.com encore définir à le scaffold par défaut or le
incorrect protocol est pourquoi c’est incorrect: balise canonicals, le sitemap, RSS liens, et
pagination tout construire off ce un valeur, donc chaque un de les silently points à le
incorrect adresse. Que faire à la place: définir url: à votre réel actif domain avec https://
avant votre premier hexo generate, et re-vérifier il quelconque temps vous déplacer domains.
Renaming a post fichier (or modification its slug) with aucun redirection
Le par défaut permalink derives l’URL depuis le post’s filename et date, donc renaming
le Markdown fichier or editing le date changements le actif URL. Pourquoi c’est incorrect: chaque
inbound lien et quelconque accumulated classement signal on le old URL est maintenant pointing à a
404. Que faire à la place: switch à hexo-abbrlink pour a stable hash-based permalink
avant vous ont liens à lose, et si vous ever doit modifier a publié URL, ajouter a 301
redirection à votre host or CDN.
Shipping sans hexo-generator-sitemap and hexo-generator-robotstxt
Assuming a static site generator “just handles” robot d’exploration basics est pourquoi c’est incorrect: a
par défaut Hexo install produces aucun a sitemap nor a robots.txt — il y a aucun
sitemap pointer pour robots d’exploration à trouver. Que faire à la place: install les deux plugins,
confirmer public/sitemap.xml et public/robots.txt exist après hexo generate, et
submit le sitemap dans Search Console et Bing Webmaster Outils.
Leaving category et balise archives ouvrir à indexation à scale
Letting Hexo’s auto-generated category/balise pages accumulate as le post count grows est pourquoi c’est incorrect: chaque archive est filled avec post excerpts que duplicate le posts themselves, donc vous fin up avec hundreds de thin pages competing pour le même requêtes et diluting explorer attention. Que faire à la place: noindex le archive templates, self-canonicalize paginated archive pages, or garder a category indexé seulement quand c’est a genuine, curated topic hub.
Assuming hexo-indexnow covers Google aussi
Installing IndexNow et expecting il à speed up Google indexation est pourquoi c’est incorrect: IndexNow est a Bing/Yandex/Baidu protocol — Google ne fait pas consume il pour general pages, donc vous encore besoin a submitted sitemap pour Google-side discovery. Que faire à la place: utiliser IndexNow pour Bing/Yandex freshness et rely on le sitemap plus normal exploration pour Google.
Deploying to GitHub Pages sans a durable CNAME
Relying on hexo-deployer-git alone pour a custom domain est pourquoi c’est incorrect: some
deploy paths reset or omit le CNAME fichier, qui silently drops votre custom domain
back à le par défaut github.io adresse (et breaks HTTPS enforcement). Que faire
à la place: garder a CNAME fichier dans source/ donc il ships avec chaque construire, et préférer a
GitHub Actions workflow que publishes le construit public/ folder intact.
Courant Hexo SEO problems
Symptom-first lookup pour problèmes vous déjà have on a Hexo site.
Sitemap.xml renvoie a 404 après deploy
Symptom: https://yoursite.com/sitemap.xml 404s, or Search Console reports it
couldn’t récupérer le sitemap.
Probable causer: hexo-generator-sitemap isn’t installed, isn’t listed in
_config.yml, or the public/ construire output wasn’t entièrement deployed (a partial upload
or a deploy step que excludes dotfiles/XML).
«Fix + check: run npm install hexo-generator-sitemap --save, add a sitemap:
block to _config.yml, then run hexo clean && hexo generate and confirm
public/sitemap.xml exists locally before deploying. After redeploying, fetch the
live URL directly (curl -I https://yoursite.com/sitemap.xml) and confirm a 200.
» (Traduction) (Résumé en français de la section cent cinquante-six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«### Google Search Console shows pages as “Discovered — currently not indexed” » (Traduction) (Résumé en français de la section cent cinquante-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Symptom: Posts are crawlable and load fine in a browser, but Search Console’s Page Indexing report leaves them in “Discovered, not indexed” for weeks. » (Traduction) (Résumé en français de la section cent cinquante-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Likely cause: thin category/tag archive pages are eating a disproportionate share of crawl attention, or the posts themselves are thin/duplicative of the archives that excerpt them. » (Traduction) (Résumé en français de la section cent cinquante-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Corriger + vérifier: noindex or canonicalize le auto-generated category/balise archives (voir le anti-patterns entry ci-dessus), requête indexation on a handful de affected URLs dans Search Console, et re-vérifier lune page Indexation rapport après a quelques days à a couple de weeks — ce n’est pas an immediate signal.
Meta description n’est pas showing up dans recherche extraits
Symptom: votre post has a description: field in front matter, but Google montre an
auto-generated snippet à la place, or view-source: montre aucun
<meta name="description"> tag at tout.
Probable causer: le theme’s head template jamais prints page.description — ce est
le unique la plupart courant Suivant gap, et il affecte autre themes aussi.
Corriger + vérifier: patch le theme’s head partiel à sortie
<meta name="description" content="{{ page.description or config.description }}">
(Suivant-style templating), rebuild, alors curl -s https://yoursite.com/your-post/ | grep -je 'nom="description"' à confirmer le balise est présent dans le raw HTML avant vous wait
on a extrait refresh.
Balise canonical is manquant or points at the incorrect URL
Symptom: curling a post montre aucun rel="canonical" tag, or it resolves to http://
au lieu de https://, or to a stale domain.
Probable causer: le theme’s canonical fonctionnalité n’est pas enabled (Suivant nécessite
canonical: true dans _config.next.yml), or url: dans le principal _config.yml est incorrect
— balise canonicals construire off que base URL.
Corriger + vérifier: confirmer url: est correct premier, enable le theme’s canonical option,
rebuild, et vérifier avec curl -s https://yoursite.com/your-post/ | grep -je 'rel="canonical"' — le valeur devrait exactly match le actif HTTPS URL.
Custom domain reverts to username.github.io après a deploy
Symptom: a working custom domain on GitHub Pages arrête resolving après a routine
hexo deploy, falling back to the par défaut github.io adresse.
Probable causer: le deploy traiter overwrote or omitted le CNAME fichier que GitHub
Pages lit à know votre custom domain.
Corriger + vérifier: put (or restore) a CNAME fichier containing simplement votre domain dans
source/ donc c’est copied dans chaque construire, redeploy, et confirmer dans le repo’s
Paramètres → Pages que le custom domain champ encore montre votre domain avec HTTPS
enforced.
Baidu isn’t indexation le site at tout
Symptom: Baidu Ziyuan (Baidu Webmaster) montre little to aucun exploration activity même though Google indexes le site fine.
Probable causer: le site is hosted on GitHub Pages, qui is blocked in mainland China, so Baidu’s robot d’exploration souvent can’t reach it consistently.
Corriger + vérifier: déplacer Baidu-facing hosting à Gitee Pages, Cloudflare, or a Chinese
CDN, ajouter Baidu site verification et a Baidu-format sitemap
(hexo-generator-baidu-sitemap), alors watch le Baidu Ziyuan explorer-frequency rapport
over le suivant weeks pour renewed activity.
Testez vos connaissances: Hexo SEO
Five rapide questions on doing SEO avec le Hexo static site generator. Pick an réponse pour chaque, alors vérifier.
Ressources utiles
Mon connexe writing
- JavaScript SEO: A Definitive Guide — rendu, DOM parity, et pourquoi static/pre-rendu sortie est le faible-risque fin de le spectrum.
- Le Beginner’s Guide à SEO technique — où rendu architecture fits dans le bigger picture.
Mon speaking
- Comment Recherche Fonctionne (SlideShare) — mon walkthrough de exploration, rendu, indexation, et classement. (Mon standing disclaimer s’applique: “This is my understanding of systems… not going to be 100% complete or accurate.”)
«From around the industry
» (Traduction) (Résumé en français de la section cent quatre-vingt-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Hexo documentation — the official docs for config, permalinks, front matter, and deployment.
» (Traduction) (Résumé en français de la section cent quatre-vingt-sept, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«- hexo-generator-sitemap — the official sitemap plugin README.
» (Traduction) (Résumé en français de la section cent quatre-vingt-sept, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
«- NexT theme SEO settings — canonical, webmaster verification, and Open Graph for the most-used theme.
» (Traduction) (Résumé en français de la section cent quatre-vingt-sept, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Google — JavaScript SEO basics — the crawl → render → index phases a static build lets you skip for content.
» (Traduction) (Résumé en français de la section cent quatre-vingt-sept, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Bing — Keeping Content Discoverable with Sitemaps — XML preference, lastmod accuracy, and IndexNow.
» (Traduction) (Résumé en français de la section cent quatre-vingt-sept, sous-partie six : le texte source est conservé pour vérification lors de la relecture francophone.)
«- John Mueller — Some design decisions — how he runs his own static blog (sitemap + RSS + Article structured data), and why switching generators isn’t itself an SEO win.
» (Traduction) (Résumé en français de la section cent quatre-vingt-sept, sous-partie sept : le texte source est conservé pour vérification lors de la relecture francophone.)
Journal des modifications
Mis à jour le 18 juil. 2026.
Résumé éditorial et détails enregistrés des changements.Détails des changements
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
Comparaison complète indisponible — aucun instantané antérieur n’a été archivé pour cette révision.
Cela vous a-t-il été utile ?
Poursuivre la conversation