Почему Hugo не загружает CSS-файл с хэшем на GitHub Pages и как это исправить
При сборке сайта на Hugo с темой Ananke и деплое на GitHub Pages вы можете столкнуться с ситуацией, когда сгенерированный CSS-файл в папке public/css/ получает имя с хэшем (например, _entry.b0a8f189.css), HTML-ссылка на него верна, сам файл присутствует в репозитории, но браузер выдаёт ошибку 404. Другие ресурсы (картинки, шрифты) загружаются нормально. Эта проблема часто связана с некорректной конфигурацией baseURL или особенностями работы assetBusting в Hugo. Ниже мы разберём основные причины и пошаговые решения.
Почему возникает ошибка 404 для CSS с хэшем
Hugo добавляет хэш к именам CSS-файлов для кэширования (cache busting). Когда сайт размещается на GitHub Pages, важно, чтобы baseURL был указан точно, включая слеш в конце. Если baseURL не совпадает с фактическим адресом, браузер ищет CSS по неправильному пути. Кроме того, необходимо убедиться, что файлы с хэшем корректно публикуются в корневой каталог репозитория (если используется ветка gh-pages или папка docs).
Пошаговая проверка и исправление
1. Корректный baseURL в конфигурации Hugo
Откройте файл config.yaml (или config.toml) вашего Hugo-сайта. Убедитесь, что параметр baseURL установлен в точный URL вашего GitHub Pages, например: baseURL: 'https://ponomarevava0.github.io/'. Обратите внимание на слеш в конце - он обязателен. Если ваш сайт расположен в подпапке (например, https://username.github.io/repository/), укажите полный путь со слешем.
2. Отключение assetBusting для отладки
Если проблема сохраняется, временно отключите генерацию хэшей. В config.yaml добавьте строку: disableAssetsBusting: true. После этого пересоберите сайт (hugo --cleanDestinationDir). Если CSS начнёт загружаться без хэша, значит, дело в кэшировании или несовместимости с GitHub Pages. Затем можно вернуть настройку обратно и искать точную причину.
3. Проверка структуры публикуемых файлов
Убедитесь, что папка public (или docs) содержит файл css/_entry.b0a8f189.css по правильному пути. Откройте репозиторий на GitHub и проверьте, что файл лежит именно там, где ожидает HTML. Иногда Hugo может помещать CSS в подпапку public/css/, а GitHub Pages ожидает его в корне. В таком случае настройте publishDir в конфиге.
4. Очистка кэша и пересборка
Удалите папку public вручную, затем выполните команду hugo --cleanDestinationDir для полной пересборки. После этого закоммитьте и запушьте изменения. Используйте git push -f только если уверены, что это не повредит историю. Очистите кэш браузера (Ctrl+F5) или откройте сайт в режиме инкогнито.
Альтернативные решения и лучшие практики
Если ни один из шагов не помог, попробуйте следующие подходы:
- Используйте подпапку docs вместо ветки gh-pages. В настройках репозитория GitHub выберите
Source: main branch /docs folder. Убедитесь, что Hugo собирает сайт именно в./docs(пропишитеpublishDir: docsв конфиге). - Настройте GitHub Actions для автоматического деплоя. Это гарантирует, что все файлы будут опубликованы в правильной структуре. Пример workflow можно найти в документации Hugo.
- Проверьте .gitignore. Убедитесь, что папка
publicилиdocsне исключена из коммита. Если она в.gitignore, файлы не попадут в репозиторий. - Протестируйте локально. Запустите
hugo serverи проверьте, загружается ли CSS локально. Если локально всё работает, проблема точно в конфигурации GitHub Pages.
Часто задаваемые вопросы
Мы собрали типичные вопросы пользователей, которые сталкиваются с ошибкой 404 CSS на GitHub Pages при использовании Hugo.