{"id":16332188,"url":"https://github.com/dimaslanjaka/hexo-seo","last_synced_at":"2025-06-22T11:35:27.175Z","repository":{"id":38420549,"uuid":"427007100","full_name":"dimaslanjaka/hexo-seo","owner":"dimaslanjaka","description":"Automated Search Engine Optimization (SEO) for Hexo","archived":false,"fork":false,"pushed_at":"2025-06-17T20:24:55.000Z","size":107878,"stargazers_count":18,"open_issues_count":6,"forks_count":0,"subscribers_count":2,"default_branch":"pre-release","last_synced_at":"2025-06-17T20:33:35.133Z","etag":null,"topics":["hexo","hexo-plugin","hexo-seo","javascript","seo","seo-optimization","typescript"],"latest_commit_sha":null,"homepage":"https://webmanajemen.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dimaslanjaka.png","metadata":{"files":{"readme":"readme.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-11-11T13:15:19.000Z","updated_at":"2025-06-17T20:24:59.000Z","dependencies_parsed_at":"2024-02-10T12:27:55.877Z","dependency_job_id":"e517889d-9233-4399-85ac-411735169dee","html_url":"https://github.com/dimaslanjaka/hexo-seo","commit_stats":{"total_commits":969,"total_committers":3,"mean_commits":323.0,"dds":0.07017543859649122,"last_synced_commit":"03d5ff1130d54b30066467bda8b03090b24b0cfa"},"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/dimaslanjaka/hexo-seo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimaslanjaka%2Fhexo-seo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimaslanjaka%2Fhexo-seo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimaslanjaka%2Fhexo-seo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimaslanjaka%2Fhexo-seo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dimaslanjaka","download_url":"https://codeload.github.com/dimaslanjaka/hexo-seo/tar.gz/refs/heads/pre-release","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimaslanjaka%2Fhexo-seo/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261288650,"owners_count":23136040,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hexo","hexo-plugin","hexo-seo","javascript","seo","seo-optimization","typescript"],"created_at":"2024-10-10T23:29:32.006Z","updated_at":"2025-06-22T11:35:22.153Z","avatar_url":"https://github.com/dimaslanjaka.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# hexo-seo\nAutomated Hexo Seo Optimizer.\n[![Post Update](https://github.com/dimaslanjaka/source-posts/actions/workflows/build-site-reusable.yml/badge.svg)](https://github.com/dimaslanjaka/source-posts/actions/workflows/build-site-reusable.yml)\n\u003c!--\n[![Test Demo](https://github.com/dimaslanjaka/hexo-seo/actions/workflows/test-demo.yml/badge.svg)](https://github.com/dimaslanjaka/hexo-seo/actions/workflows/test-demo.yml)\n[![Build Release](https://github.com/dimaslanjaka/hexo-seo/actions/workflows/build-release.yml/badge.svg)](https://github.com/dimaslanjaka/hexo-seo/actions/workflows/build-release.yml)\n--\u003e\n\n# Features\n\n- Auto add anchor title (if not exists)\n- Auto determine anchor external link and nofollow them\n- ~Auto replace broken images~\n- Auto compress CSS JS HTML\n- Auto add alternate and title of images\n- Auto add sitemap (forked from **yoast seo wordpress plugin**)\n- Auto add [google news sitemap](https://www.npmjs.com/package/google-news-sitemap)\n- Tested on hexo instances with 1000 more posts and pages\n- Concatenate all javascripts into one file\n- Rich snippets (breadcrumbs, website, article)\n\n\u003e ## The reason why some features are removed\n\u003e 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\n\n\n# demo\ndemo site generated with `hexo-seo`\n- [YoastSEO sitemap](https://www.webmanajemen.com/sitemap.xml)\n- [Rich Snippet](https://search.google.com/test/rich-results?hl=en\u0026url=https%3A%2F%2Fwww.webmanajemen.com%2Fchimeraland%2Fblacklist-player.html)\n\n# Installation\n\nUsing NPM Repository (Production)\n```shell\nnpm i hexo-seo\n```\n\nUsing Git Repository (Development)\n```shell\nnpm i hexo-seo@https://github.com/dimaslanjaka/hexo-seo/raw/pre-release/release/hexo-seo.tgz\n```\n\n\u003e Using tarball is useful for git which not installed properly or for you in chinese mainland\n\n| description | link |\n| :--- | :--- |\n| master tarball | https://github.com/dimaslanjaka/hexo-seo/raw/master/release/hexo-seo.tgz |\n| pre-release tarball | https://github.com/dimaslanjaka/hexo-seo/raw/pre-release/release/hexo-seo.tgz |\n\n\u003e you can change `master` or `pre-release` with spesific **commit hash**\n\n# Usage\n\n## Configuration\n\n[config full example](https://github.com/dimaslanjaka/site/blob/hexo-seo/_config.yml#L138)\n\n```yaml\n# https://github.com/dimaslanjaka/hexo-seo\nseo:\n  # minify html\n  html:\n    enable: true\n    # fix invalid html\n    fix: true\n    # exclude from minify\n    exclude:\n      - \"*.min.{htm,html}\"\n  # minify css\n  css:\n    enable: true\n    # If you want to customize the css minifier settings, you can put below\n    # exclude css from minifying, multiple supported\n    exclude:\n      - \"**/*.min.css\"\n  # minify js\n  js:\n    enable: true\n    # concatenate all js into one tag\n    ## WARNING: DO NOT USING ANOTHER MINIFIER PLUGIN\n    concat: false\n    # If you want to customize the js minifier settings, you can put below\n    # exclude css from minifying, multiple supported\n    exclude:\n      - \"**/*.min.js\"\n    # this is terser options, you can customize minifier with terser options\n    # https://github.com/terser/terser?tab=readme-ov-file#minify-options-structure\n    # below is config example\n    options:\n      compress:\n        dead_code: true\n      mangle:\n        toplevel: true\n        safari10: true\n  # rich snippets\n  schema:\n    # produce schema for page and post\n    article:\n      enable: true\n    # produce schema for breadcrumb\n    breadcrumb:\n      enable: true\n    # produce schema for sitelink\n    sitelink:\n      enable: true\n      searchUrl: https://www.webmanajemen.com/search?q={search_term_string}\n    # produce schema for homepage\n    homepage:\n      enable: true\n  # this function still under development because JAVASCRIPT HEAP MEMORY and my device is 8GB RAM\n  img:\n    enable: true\n    # fix broken images\n    broken: false\n    # default broken/missing images\n    # https://github.com/dimaslanjaka/hexo-seo/blob/f4cf27fbc7de2b831462d3b26cf70ece2499d15b/src/search/index.ts#L53\n    default: https://upload.wikimedia.org/wikipedia/commons/6/65/No-Image-Placeholder.svg\n    # broken images methods\n    # serverside : process broken images from server side (caused javascript heap out of memory, if your post large and your device has insufficient memory)\n    # clientside : process broken image from client side browser with webjs\n    onerror: serverside\n  # external links fix\n  links:\n    # enable or false\n    enable: true\n    # allowed following links, otherwise nofollow others\n    exclude:\n      - webmanajemen.com\n      - web-manajemen.blogspot.com\n  # seo-friendly sitemap\n  # you can fill value `sitemap: true` to create both sitemaps\n  sitemap:\n    # auto generate seo friendly sitemap on http://yoursite.com/sitemap.xml\n    # forked from yoast seo\n    # location: /sitemap.xml /page-sitemap.xml /post-sitemap.xml /category-sitemap.xml /tag-sitemap.xml\n    yoast: true\n    # google news sitemap\n    # location: /google-news-sitemap.xml\n    gnews: true\n  search:\n    # hexo seo-search page type to index\n    type: ['page', 'post']\n  feed:\n    # hexo seo-feed page type to index\n    type: [page, post]\n    # site icon for rss (PNG, JPEG, GIF)\n    icon: 'https://w7.pngwing.com/pngs/745/306/png-transparent-gallery-image-images-photo-picture-pictures-set-app-incredibles-icon-thumbnail.png'\n```\n\n## Generate search data\n\nGenerate json data for all published posts or pages (based on `config.seo.search.type`)\n\n\u003e Support generate more than 1k pages on device RAM 8 GB\n\u003e\n\u003e json data saved on `public_dir/hexo-seo-search.json` and `source_dir/hexo-seo-search.json`\n\n```bash\nhexo seo-search\n```\n\n\u003cdetails\u003e\n  \u003csummary\u003eSearch data result\u003c/summary\u003e\n\n  ```jsonc\n  [\n    {\n      \"title\": \"Blockquote Shortcode\",\n      \"date\": \"2023-04-08T15:30:00.691Z\",\n      \"updated\": \"2023-04-08T15:30:00.691Z\",\n      \"slug\": \"blockquote\",\n      \"excerpt\": \"\",\n      \"permalink\": \"http://www.webmanajemen.com/docs/hexo-seo/blockquote.html\",\n      \"layout\": \"post\",\n      \"objectID\": \"54fb9f4665464c46cd47ce1259af43a1\",\n      \"date_as_int\": 1680967800,\n      \"updated_as_int\": 1680967800,\n      \"categories\": [\n        {\n          \"name\": \"hexo\",\n          \"path\": \"categories/hexo/\"\n        }\n      ],\n      \"tags\": [\n        {\n          \"name\": \"blockquote\",\n          \"path\": \"tags/blockquote/\"\n        },\n        {\n          \"name\": \"shortcode\",\n          \"path\": \"tags/shortcode/\"\n        }\n      ],\n      \"author\": \"Dimas Lanjaka\"\n    },\n    // and more data here\n  ]\n  ```\n\u003c/details\u003e\n\n## Generate feeds\n\nGenerate RSS 2.0 and ATOM file\n\n```bash\nhexo seo-feed\n```\n\nGenerated file written to\n\n- RSS: `public_dir/rss.xml` and `source_dir/rss.xml`\n- ATOM: `public_dir/atom.xml` and `source_dir/atom.xml`\n\n## Site/Post/Page front-matter metadata\n\nThis plugin support parsing these customized metadata\n\n### Author\n\nBy default hexo author is string with value author name\n\n```yaml\nauthor: Author Name\n```\n\nFor this plugin, we can put author metadata with more **complex** information. [Reference](https://github.com/dimaslanjaka/hexo-seo/blob/pre-release/src/utils/getAuthor.ts)\n\n```yaml\nauthor:\n  name: Author Name\n  link: http://facebook.com/authorUsername\n  email: author@gmail.com\n```\n\n\u003e This parser supported for site config (**_config.yml**) and post markdown and page markdown.\n\n# Preview\n\n![Google Rich Snippets using schema markup v4](https://github.com/dimaslanjaka/hexo-seo/assets/12471057/4851e1e8-cfc6-474c-903d-fdd9c19061aa \"Google Rich Snippets using schema markup v4\")\n![Schema Article](https://user-images.githubusercontent.com/12471057/142891853-7c00a941-26b6-4a69-9fcd-59b61505e920.png)\n![Yoast SEO Sitemap](https://github.com/dimaslanjaka/hexo-seo/assets/12471057/c9bb6b8b-9aeb-4b83-b4cd-d86bafd33d50)\n\n# Issues\n- `hexo.on('exit')` not called at end of process\n\u003e no more issue [Hexo On Exit Event](https://github.com/hexojs/hexo/issues/4822)\n\u003e this plugin already have schedule function\n\n# Troubleshoot\n\n- node_libcurl binding not found\n```shell\nsudo apt-get install libcurl4-openssl-dev -y\n# run below codes only if above package already installed\nrm -rf node_modules/node-libcurl\nnpm install node-libcurl --build-from-source\n```\n\n- Fix javascript heap out of memory\n\n```shell\n# POSIX\nexport NODE_OPTIONS=--max_old_space_size=8096\n# windows\nset NODE_OPTIONS=--max_old_space_size=8096\n```\n\n- **important** after you update this plugin, you could cleaning the temp folders with:\n\n```shell\nhexo clean # this will cleaning temporarily folders of this plugin\n```\n\n# FAQ\n\n- Why search, rss, atom separated to CLI usage ?\n\n\u003e 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.\n\u003e\n\u003e So, the best practice is **separate the process**\n\n# Status\n[![Available](https://img.shields.io/github/issues/dimaslanjaka/hexo-seo/Status:%20Available.svg?color=brightgreen)](https://github.com/dimaslanjaka/hexo-seo/issues?q=is%3Aopen+is%3Aissue+label%3A%22Status%3A+Available%22) [![In Progress](https://img.shields.io/github/issues/dimaslanjaka/hexo-seo/Status:%20In%20Progress.svg)](https://github.com/dimaslanjaka/hexo-seo/labels/Status:%20In%20Progress) [![Review Needed](https://img.shields.io/github/issues/dimaslanjaka/hexo-seo/Status:%20Review%20Needed.svg)](https://github.com/dimaslanjaka/hexo-seo/labels/Status%3A%20Review%20Needed)\n\n[![Critical](https://img.shields.io/github/issues/dimaslanjaka/hexo-seo/Priority:%20Critical.svg?color=critical\n)](https://github.com/dimaslanjaka/hexo-seo/labels/Priority%3A%20Critical) [![High](https://img.shields.io/github/issues/dimaslanjaka/hexo-seo/Priority:%20High.svg?color=important)](https://github.com/dimaslanjaka/hexo-seo/labels/Priority%3A%20High) [![Medium](https://img.shields.io/github/issues/dimaslanjaka/hexo-seo/Priority:%20Medium.svg)](https://github.com/dimaslanjaka/hexo-seo/labels/Priority%3A%20Medium) [![Low](https://img.shields.io/github/issues/dimaslanjaka/hexo-seo/Priority:%20Low.svg)](https://github.com/dimaslanjaka/hexo-seo/labels/Priority%3A%20Low)\n\n# Website using Hexo NodeJS Blogging System\n\n[![Build And Tests](https://github.com/dimaslanjaka/dimaslanjaka.github.io/actions/workflows/page.yml/badge.svg?branch=compiler)](https://github.com/dimaslanjaka/dimaslanjaka.github.io/actions/workflows/page.yml)\n[![GitHub](https://badgen.net/badge/icon/github?icon=github\u0026label\u0026style=flat-square)](https://github.com/dimaslanjaka/dimaslanjaka.github.io/tree/compiler)\n[![webmanajemen.com](https://img.shields.io/website.svg?down_color=red\u0026down_message=down\u0026style=flat-square\u0026up_color=green\u0026up_message=up\u0026label=webmanajemen.com\u0026url=https://webmanajemen.com)](https://webmanajemen.com)\n\n## hexo-adsense\n[![npm version](https://badge.fury.io/js/hexo-adsense.svg?style=flat-square)](https://badge.fury.io/js/hexo-adsense)\n[![Npm package yearly downloads](https://badgen.net/npm/dy/hexo-adsense?style=flat-square)](https://npmjs.com/package/hexo-adsense)\n[![Minimum node.js version](https://badgen.net/npm/node/hexo-adsense?style=flat-square)](https://npmjs.com/package/hexo-adsense)\n![GitHub repo size](https://img.shields.io/github/repo-size/dimaslanjaka/hexo-adsense?label=Repository%20Size\u0026style=flat-square)\n![GitHub last commit](https://img.shields.io/github/last-commit/dimaslanjaka/hexo-adsense?color=blue\u0026label=Last%20Commit\u0026style=flat-square)\n\n## hexo-seo\n[![npm version](https://badge.fury.io/js/hexo-seo.svg?style=flat-square)](https://badge.fury.io/js/hexo-seo)\n[![Npm package yearly downloads](https://badgen.net/npm/dy/hexo-seo?style=flat-square)](https://npmjs.com/package/hexo-seo)\n[![Minimum node.js version](https://badgen.net/npm/node/hexo-seo?style=flat-square)](https://npmjs.com/package/hexo-seo)\n![GitHub repo size](https://img.shields.io/github/repo-size/dimaslanjaka/hexo-seo?label=Repository%20Size\u0026style=flat-square)\n![GitHub last commit](https://img.shields.io/github/last-commit/dimaslanjaka/hexo-seo?color=blue\u0026label=Last%20Commit\u0026style=flat-square)\n\n## hexo-blogger-xml\n[![npm version](https://badge.fury.io/js/hexo-blogger-xml.svg?style=flat-square)](https://badge.fury.io/js/hexo-blogger-xml)\n[![Npm package yearly downloads](https://badgen.net/npm/dy/hexo-blogger-xml?style=flat-square)](https://npmjs.com/package/hexo-blogger-xml)\n[![Minimum node.js version](https://badgen.net/npm/node/hexo-blogger-xml?style=flat-square)](https://npmjs.com/package/hexo-blogger-xml)\n![GitHub repo size](https://img.shields.io/github/repo-size/dimaslanjaka/hexo-blogger-xml?label=Repository%20Size\u0026style=flat-square)\n![GitHub last commit](https://img.shields.io/github/last-commit/dimaslanjaka/hexo-blogger-xml?color=blue\u0026label=Last%20Commit\u0026style=flat-square)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdimaslanjaka%2Fhexo-seo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdimaslanjaka%2Fhexo-seo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdimaslanjaka%2Fhexo-seo/lists"}