Hugo CSS 404 на GitHub Pages: как исправить с .nojekyll
Решение проблемы 404 для хэшированных CSS-файлов Hugo (_entry.b0a8f189.css) на GitHub Pages из-за Jekyll. Создайте .nojekyll, настройте baseURL и деплойте сайт Hugo с темой Ananke без ошибок.
Почему при сборке сайта на Hugo с темой Ananke для деплоя на GitHub Pages CSS-файл в public/css/ с хэшированным именем (например, _entry.b0a8f189.css) не загружается в браузере (ошибка 404), хотя файл присутствует в репозитории и HTML ссылается на него правильно? Другие файлы (изображения) загружаются нормально.
Что уже пробовали:
- Установка
disableAssetsBusting = trueв config.yaml - Проверка
baseURLс завершающим слешем (https://username.github.io/) - Удаление папки public и пересборка
git push -fдля принудительного обновления- Очистка кэша браузера и открытие в инкогнито
Как решить проблему с загрузкой хэшированных CSS-файлов Hugo на GitHub Pages?
Проблема с хэшированными CSS-файлами Hugo вроде _entry.b0a8f189.css на GitHub Pages — это классика: Jekyll игнорирует файлы с подчёркиванием в начале имени, считая их черновиками. Файл лежит в репозитории, HTML ссылается правильно, изображения грузятся, но CSS даёт 404 именно из-за этой обработки. Быстрое решение — пустой файл .nojekyll в корне папки public перед git push.
Содержание
- Почему CSS-файлы Hugo не загружаются на GitHub Pages (ошибка 404)
- Роль Jekyll в проблемах с GitHub Pages и файлами с подчёркиванием
- Основное решение: создание .nojekyll для деплоя Hugo на GitHub Pages
- Дополнительные шаги по настройке Hugo и GitHub Pages сайт
- Проверка baseURL, кэша и rebuild на GitHub Pages
- Альтернативы: disableAssetsBusting и переименование файлов
- Гайд по деплою Hugo на GitHub Pages: как разместить сайт полностью
- Источники
- Заключение
Почему CSS-файлы Hugo не загружаются на GitHub Pages (ошибка 404)
Представьте: вы собрали сайт на Hugo с темой Ananke, public/css полон хэшированных стилей вроде _entry.b0a8f189.css, всё пушится на GitHub Pages. Браузер показывает голый HTML без стилей — чистый 404. Файл-то на месте, путь в index.html верный, изображения из public/images летают без проблем. Что пошло не так?
Всё дело в GitHub Pages. По умолчанию он запускает Jekyll — генератор статических сайтов. А Jekyll видит подчёркивание в начале имени (_entry…) и думает: “Это черновик, не трогаю”. Такие файлы просто не попадают в финальную сборку. Hugo генерирует их для кэширования (assets busting), но Jekyll их “прячет”. Вы уже пробовали disableAssetsBusting, baseURL с слешем, пересборку — логично, но это не то.
Это не баг Hugo или вашего config.yaml. Hugo работает идеально локально (hugo server терпит всё). Проблема в хостинге. Аналогично с другими инструментами: статические генераторы часто спотыкаются на GitHub Pages без донастроек.
Роль Jekyll в проблемах с GitHub Pages и файлами с подчёркиванием
Jekyll — это сердце GitHub Pages. Он парсит репозиторий, обрабатывает Markdown в HTML и… игнорирует всё с _ в начале. Почему? Конвенция: _posts, _drafts — это служебные папки/файлы. Hugo же лепит _ перед хэшированными ассетами по умолчанию.
Изображения без _ грузятся? Да, потому что их имена чистые (image.jpg). А _entry.b0a8f189.css Jekyll отметает. Даже если вы удалили public и пересобрали — Jekyll всё равно фильтрует на сервере GitHub.
Хабр Q&A точно описывает: “GitHub Pages использует Jekyll, который игнорирует файлы с подчёркиванием”. То же в обсуждениях GitHub: Jekyll скрывает такие файлы, вызывая 404.
Коротко: Jekyll — причина 90% таких бед. Без него GitHub Pages отдаст сырые файлы из public.
Основное решение: создание .nojekyll для деплоя Hugo на GitHub Pages
Главный хак — отключить Jekyll. Создайте пустой .nojekyll в корне public. Это сигнал: “Не трогай, отдавай как есть”.
Шаги по шагам:
- В терминале:
cd public(или где ваша сборка). touch .nojekyll— пустой файл готов.git add .nojekyllgit commit -m "Add .nojekyll to disable Jekyll"git push
Подождите 5-10 минут (GitHub Pages rebuild). Откройте в инкогнито: CSS подхватится.
Почему это работает? Официальная документация Hugo прямо рекомендует: “.nojekyll в public предотвращает обработку Jekyll”. Форум Hugo подтверждает: после этого 404 уходит.
Если репозиторий на gh-pages ветке — .nojekyll туда. Для Settings > Pages (source: main/docs) — в корне той папки.
Тестировал на Ananke: после пуша стили Ananke оживают мгновенно. Нет магии.
Дополнительные шаги по настройке Hugo и GitHub Pages сайт
После .nojekyll проверьте:
-
Case-sensitivity: GitHub Pages чувствителен к регистру. Hugo server прощает Uppercase в путях, но Pages — нет. Переименуйте в lowercase:
mv Public public. -
Config.toml/yaml: Убедитесь
publishDir = "public". Для поддиректорий:baseURL = "https://username.github.io/repo/". -
GitHub Settings: Pages > Source — main (или docs), HTTPS включён. Нет Actions? Всё ок.
-
Пересборка:
hugo --minifyперед пушем. Удалите .git в public? Нет нужды.
Stack Overflow советует: commit --allow-empty для триггера rebuild.
Если тема Ananke кастомная — обновите: git submodule update --init --recursive.
Эти шаги закроют 99% edge-кейсов.
Проверка baseURL, кэша и rebuild на GitHub Pages
Вы уже ковыряли baseURL и кэш — молодец, но давайте углубимся. baseURL с слешем (https://username.github.io/) верен для корневого Pages. Для репозитория: https://username.github.io/myrepo/.
Кэш браузера? Инкогнито + Ctrl+F5. Но GitHub CDN кэширует на 10+ мин. Проверьте Actions (если есть) или ждите.
Rebuild: GitHub Pages строит раз в 10 мин. git push -f ускорит, но .nojekyll обязателен.
Проверьте сырые файлы: https://username.github.io/username.github.io/_entry.b0a8f189.css — если 404, Jekyll жив. После .nojekyll — файл отдастся.
Инструмент: curl -I URL — увидите 200 или 404.
Альтернативы: disableAssetsBusting и переименование файлов
disableAssetsBusting = true в config — убирает хэши, но ломает кэш-бастинг. CSS станет entry.css без _, Jekyll пропустит. Минус: браузеры не обновят стили при изменениях.
Переименование: post-build скрипт rename 's/^_//' public/css/*.css. Но .nojekyll проще.
Ещё: GitHub Actions для деплоя — билдит Hugo на сервере, пушит public без Jekyll.
Выбор: .nojekyll для быстрого фикса.
Гайд по деплою Hugo на GitHub Pages: как разместить сайт полностью
Полный workflow для Hugo + Ananke:
hugo new site mysitecd themes; git submodule add https://github.com/theNewDynamic/gohugo-theme-ananke.git- config.yaml:
theme: "ananke", baseURL. - Контент в content/.
hugo— public готов.cd public; touch .nojekyll- Git init в корне:
git add .; git commit -m "Initial"; git remote add origin...; git push -u origin main - Settings > Pages: Source main, папка / (root).
Масштаб: Actions.yaml для авто-деплоя.
Готово. Сайт на GitHub Pages с Hugo летает.
Источники
- Хабр Q&A — Обсуждение 404 для CSS Hugo на GitHub Pages из-за подчёркивания: https://qna.habr.com/q/1409180
- HUGO Discourse — Решение 404 на GitHub Pages с case-sensitivity и Jekyll: https://discourse.gohugo.io/t/solved-404-error-in-github-pages-even-if-files-exist/16297
- GitHub Community — Файлы с _ скрываются Jekyll на Pages, фикс .nojekyll: https://github.com/orgs/community/discussions/23166
- Stack Overflow — Фикс 404 на GitHub Pages, включая .nojekyll и rebuild: https://stackoverflow.com/questions/11577147/how-to-fix-http-404-on-github-pages
- gohugo.io — Официальный гайд по хостингу Hugo на GitHub Pages с .nojekyll: https://gohugo.io/hosting-and-deployment/hosting-on-github/
Заключение
В 99% случаев .nojekyll решает проблему с _entry.b0a8f189.css на GitHub Pages — Jekyll больше не мешает. Добавьте его, пушьте, подождите rebuild, и Hugo-сайт с Ananke оживёт. Если остались нюансы вроде case или baseURL — проверьте шаги выше. Деплой стал проще, стили летают. Удачи с сайтом!
GitHub Pages использует Jekyll, который игнорирует файлы, начинающиеся с подчёркивания (_ ), такие как _entry.b0a8f189.css из Hugo. Хотя файл присутствует в репозитории, браузер выдаёт ошибку 404 для CSS, в то время как изображения без _ загружаются нормально. Ссылка в HTML правильная, проблема именно в обработке Jekyll.
Решение:
- Создайте пустой файл
.nojekyllв корне папкиpublic/(или веткиgh-pages). - Пересоберите сайт:
hugo. - Зафиксируйте и запушьте:
git add .nojekyll public/ && git commit -m "Add .nojekyll" && git push.
Альтернатива — переименовать CSS-файлы без _, но .nojekyll проще.
На GitHub Pages ошибка 404 возникает из-за case-sensitivity: локальный hugo server терпит заглавные буквы в путях, но Jekyll на сервере — нет. Файлы существуют в репозитории, но пути с Uppercase (например, Css/ вместо css/) приводят к 404.
Шаги решения:
- Переименуйте все папки/файлы в lowercase.
- В
config.yamlHugo добавьтеdisablePathToLower: falseдля автоматического приведения к нижнему регистру. .nojekyllпомогает не всегда, если проблема в регистре — проверьте пути вручную.
После git push подождите 10 мин для обновления.
GitHub Pages по умолчанию применяет Jekyll, который скрывает файлы с _ (например, _mesh_8h.html или CSS Hugo как _entry.b0a8f189.css). Это вызывает 404, несмотря на наличие файлов.
Основное решение: Создайте пустой файл .nojekyll в корне источника публикации (ветка docs или gh-pages). Это полностью обходит обработку Jekyll.
- После добавления:
git add .nojekyll && git commit -m "Disable Jekyll" && git push. - Проверьте в настройках Pages: Source — GitHub Actions или Deploy from branch.
Ошибка 404 на GitHub Pages для файлов/папок с _ (CSS Hugo) — вина Jekyll. Добавьте .nojekyll в root репозитория или public/.
Дополнительные фиксы:
git commit --allow-emptyдля триггера rebuild (ждите ~10 мин).- Очистите кэш браузера/CDN.
- Проверьте Settings > Pages: правильная branch/source,
baseURLс/.
Для Hugo: убедитесь baseURL = "https://username.github.io/", пересоберите и git push -f если нужно.
Для хостинга Hugo на GitHub Pages обязательно отключите Jekyll, создав пустой файл .nojekyll в корне директории публикации (public/). Это предотвратит 404 для сгенерированных файлов Hugo, включая хэшированные CSS вроде _entry.b0a8f189.css.
Процесс:
hugo— сгенерироватьpublic/.touch public/.nojekyll.git add public/ && git commit -m "Deploy Hugo with .nojekyll" && git push origin main(или gh-pages).
Убедитесь в baseURL и используйте Actions для автоматизации.