Главная / База знаний / Технические проблемы / 404 ошибки на работающих ссылках: причины и фикс
База знаний

404 ошибки на работающих ссылках: причины и фикс

Linked URL возвращает 404, хотя страница работает. Кеши, редиректы, права доступа — где искать.

Технические проблемы · 3 мин чтения

Симптом

Причина

  1. Кеширование
    - Веб‑сервер (nginx, Apache) или CDN (Cloudflare, Akamai) хранит старую запись о том, что ресурс отсутствует.
    - Браузер может использовать кеш‑заголовки Cache-Control: no-store или Expires и отдавать 404 из кеша.

  2. Редиректы и правила .htaccess / nginx
    - Неправильные правила переписывания (RewriteRule, try_files) могут вернуть 404, если файл не найден в файловой системе, но URL корректен.
    - При использовании CMS (WordPress, Drupal) плагины могут генерировать временные 404 до обновления кэша.

  3. Права доступа
    - Файл существует, но у веб‑процесса нет прав читать его (chmod 644, chown www-data).
    - В случае с Nginx, если root указывает на неверную директорию, запрос попадает в другую папку и 404.

  4. Проблемы с файловой системой
    - Символические ссылки (symlink) могут быть разорваны.
    - Файлы могут быть удалены, но ссылки в базе данных остаются.

  5. Проблемы с DNS / балансировкой нагрузки
    - Один из серверов в пуле возвращает 404, другие — 200.

Как проверить

  1. Проверка логов
    bash tail -f /var/log/nginx/access.log tail -f /var/log/nginx/error.log Ищите строки с 404 и сопоставляйте их с временем запроса.

  2. Проверка кеша
    bash curl -I https://example.com/your-page Обратите внимание на заголовки Cache-Control, Expires, ETag.

  3. Проверка прав доступа
    bash ls -l /var/www/html/your-page Убедитесь, что владелец и права позволяют веб‑пользователю читать файл.

  4. Проверка правил переписывания
    - Для nginx: nginx location / { try_files $uri $uri/ /index.php?$args; } - Для Apache (.htaccess): apache RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] Убедитесь, что правила не конфликтуют.

  5. Проверка файловой системы
    bash find /var/www/html -type l -exec ls -l {} \; Ищите разорванные symlink.

  6. Проверка балансировщика
    - Если используется HAProxy: bash echo "show stat" | socat stdio /var/run/haproxy.sock - Смотрите, не возвращает ли один сервер 404.

Решение

  1. Очистить кеш
    - nginx:
    bash sudo systemctl reload nginx - CDN: в панели управления очистите кеш для конкретного пути.
    - Браузер: Ctrl+F5 или очистка кеша.

  2. Проверить и поправить правила переписывания
    - Убедитесь, что try_files указывает на правильный путь.
    - Если используется CMS, отключите временно плагины, которые могут влиять на маршрутизацию.

  3. Восстановить права доступа
    bash sudo chown -R www-data:www-data /var/www/html sudo find /var/www/html -type d -exec chmod 755 {} \; sudo find /var/www/html -type f -exec chmod 644 {} \;

  4. Проверить и восстановить symlink
    bash ln -s /var/www/html/real-folder /var/www/html/link

  5. Проверить балансировщик
    - Перезапустите балансировщик, убедитесь, что все узлы здоровы.
    - Если один узел возвращает 404, проверьте его логи и файловую систему.

  6. Проверить конфигурацию CDN
    - Убедитесь, что правила кеширования не блокируют динамические страницы.
    - Включите режим разработки (debug) и посмотрите, какие заголовки приходят от CDN.

  7. Проверка через инструменты разработчика
    - Откройте вкладку Network, выберите запрос, посмотрите статус и заголовки.
    - Если статус 404, но в Response виден контент, значит сервер вернул 404, но браузер отобразил страницу.

После выполнения этих шагов проблема с 404 на работающих ссылках должна исчезнуть. Если ошибка сохраняется, проверьте логи более подробно и убедитесь, что нет конфликтов между сервером, CDN и балансировщиком.

Связанные

SEO КП · нужна помощь?

Не хотите разбираться сами?

Запустите технический аудит сайта за 5 минут — получите PDF-отчёт с разбором всех 64 параметров и конкретными точками роста. Или закажите комплексное SEO-продвижение сайта — починим всё это и возьмём на себя дальнейшую оптимизацию.

Запустить аудит за 199 ₽ Узнать про продвижение →