Skip to content

dimaslanjaka/hexo-seo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

hexo-seo

Automated Hexo Seo Optimizer. Post Update

Features

  • Auto add anchor title (if not exists)
  • Auto determine anchor external link and nofollow them
  • Auto replace broken images
  • Auto compress CSS JS HTML
  • Auto add alternate and title of images
  • Auto add sitemap (forked from yoast seo wordpress plugin)
  • Auto add google news sitemap
  • Tested on hexo instances with 1000 more posts and pages
  • Concatenate all javascripts into one file
  • Rich snippets (breadcrumbs, website, article)

The reason why some features are removed

Separated due to very high memory usage and risk of HEAP MEMORY errors. so I will merge it to https://github.com/dimaslanjaka/static-blog-generator as a specific task

demo

demo site generated with hexo-seo

Installation

Using NPM Repository (Production)

npm i hexo-seo

Using Git Repository (Development)

npm i hexo-seo@https://github.com/dimaslanjaka/hexo-seo/raw/pre-release/release/hexo-seo.tgz

Using tarball is useful for git which not installed properly or for you in chinese mainland

description link
master tarball https://github.com/dimaslanjaka/hexo-seo/raw/master/release/hexo-seo.tgz
pre-release tarball https://github.com/dimaslanjaka/hexo-seo/raw/pre-release/release/hexo-seo.tgz

you can change master or pre-release with spesific commit hash

Usage

Configuration

config full example

# https://github.com/dimaslanjaka/hexo-seo
seo:
  # minify html
  html:
    enable: true
    # fix invalid html
    fix: true
    # exclude from minify
    exclude:
      - "*.min.{htm,html}"
  # minify css
  css:
    enable: true
    # If you want to customize the css minifier settings, you can put below
    # exclude css from minifying, multiple supported
    exclude:
      - "**/*.min.css"
  # minify js
  js:
    enable: true
    # concatenate all js into one tag
    ## WARNING: DO NOT USING ANOTHER MINIFIER PLUGIN
    concat: false
    # If you want to customize the js minifier settings, you can put below
    # exclude css from minifying, multiple supported
    exclude:
      - "**/*.min.js"
    # this is terser options, you can customize minifier with terser options
    # https://github.com/terser/terser?tab=readme-ov-file#minify-options-structure
    # below is config example
    options:
      compress:
        dead_code: true
      mangle:
        toplevel: true
        safari10: true
  # rich snippets
  schema:
    # produce schema for page and post
    article:
      enable: true
    # produce schema for breadcrumb
    breadcrumb:
      enable: true
    # produce schema for sitelink
    sitelink:
      enable: true
      searchUrl: https://www.webmanajemen.com/search?q={search_term_string}
    # produce schema for homepage
    homepage:
      enable: true
  # this function still under development because JAVASCRIPT HEAP MEMORY and my device is 8GB RAM
  img:
    enable: true
    # fix broken images
    broken: false
    # default broken/missing images
    # https://github.com/dimaslanjaka/hexo-seo/blob/f4cf27fbc7de2b831462d3b26cf70ece2499d15b/src/search/index.ts#L53
    default: https://upload.wikimedia.org/wikipedia/commons/6/65/No-Image-Placeholder.svg
    # broken images methods
    # serverside : process broken images from server side (caused javascript heap out of memory, if your post large and your device has insufficient memory)
    # clientside : process broken image from client side browser with webjs
    onerror: serverside
  # external links fix
  links:
    # enable or false
    enable: true
    # allowed following links, otherwise nofollow others
    exclude:
      - webmanajemen.com
      - web-manajemen.blogspot.com
  # seo-friendly sitemap
  # you can fill value `sitemap: true` to create both sitemaps
  sitemap:
    # auto generate seo friendly sitemap on http://yoursite.com/sitemap.xml
    # forked from yoast seo
    # location: /sitemap.xml /page-sitemap.xml /post-sitemap.xml /category-sitemap.xml /tag-sitemap.xml
    yoast: true
    # google news sitemap
    # location: /google-news-sitemap.xml
    gnews: true
  search:
    # hexo seo-search page type to index
    type: ['page', 'post']
  feed:
    # hexo seo-feed page type to index
    type: [page, post]
    # site icon for rss (PNG, JPEG, GIF)
    icon: 'https://w7.pngwing.com/pngs/745/306/png-transparent-gallery-image-images-photo-picture-pictures-set-app-incredibles-icon-thumbnail.png'

Generate search data

Generate json data for all published posts or pages (based on config.seo.search.type)

Support generate more than 1k pages on device RAM 8 GB

json data saved on public_dir/hexo-seo-search.json and source_dir/hexo-seo-search.json

hexo seo-search
Search data result
[
  {
    "title": "Blockquote Shortcode",
    "date": "2023-04-08T15:30:00.691Z",
    "updated": "2023-04-08T15:30:00.691Z",
    "slug": "blockquote",
    "excerpt": "",
    "permalink": "http://www.webmanajemen.com/docs/hexo-seo/blockquote.html",
    "layout": "post",
    "objectID": "54fb9f4665464c46cd47ce1259af43a1",
    "date_as_int": 1680967800,
    "updated_as_int": 1680967800,
    "categories": [
      {
        "name": "hexo",
        "path": "categories/hexo/"
      }
    ],
    "tags": [
      {
        "name": "blockquote",
        "path": "tags/blockquote/"
      },
      {
        "name": "shortcode",
        "path": "tags/shortcode/"
      }
    ],
    "author": "Dimas Lanjaka"
  },
  // and more data here
]

Generate feeds

Generate RSS 2.0 and ATOM file

hexo seo-feed

Generated file written to

  • RSS: public_dir/rss.xml and source_dir/rss.xml
  • ATOM: public_dir/atom.xml and source_dir/atom.xml

Site/Post/Page front-matter metadata

This plugin support parsing these customized metadata

Author

By default hexo author is string with value author name

author: Author Name

For this plugin, we can put author metadata with more complex information. Reference

author:
  name: Author Name
  link: http://facebook.com/authorUsername
  email: author@gmail.com

This parser supported for site config (_config.yml) and post markdown and page markdown.

Preview

Google Rich Snippets using schema markup v4 Schema Article Yoast SEO Sitemap

Issues

  • hexo.on('exit') not called at end of process

no more issue Hexo On Exit Event this plugin already have schedule function

Troubleshoot

  • node_libcurl binding not found
sudo apt-get install libcurl4-openssl-dev -y
# run below codes only if above package already installed
rm -rf node_modules/node-libcurl
npm install node-libcurl --build-from-source
  • Fix javascript heap out of memory
# POSIX
export NODE_OPTIONS=--max_old_space_size=8096
# windows
set NODE_OPTIONS=--max_old_space_size=8096
  • important after you update this plugin, you could cleaning the temp folders with:
hexo clean # this will cleaning temporarily folders of this plugin

FAQ

  • Why search, rss, atom separated to CLI usage ?

When compiled inside hexo process, these functions will generate new array with same size of all page/post length. This may caused OUT OF MEMORY HEAP, specially for device RAM 8 GB OR Github Actions (CI) free.

So, the best practice is separate the process

Status

Available In Progress Review Needed

Critical High Medium Low

Website using Hexo NodeJS Blogging System

Build And Tests GitHub webmanajemen.com

hexo-adsense

npm version Npm package yearly downloads Minimum node.js version GitHub repo size GitHub last commit

hexo-seo

npm version Npm package yearly downloads Minimum node.js version GitHub repo size GitHub last commit

hexo-blogger-xml

npm version Npm package yearly downloads Minimum node.js version GitHub repo size GitHub last commit