Czy umieszczenie kodu HTML ze strony przekierowania 301 w dokumencie będzie pełniło tę samą funkcję, co prawdziwe przekierowanie 301?

15

W debuggerze internetowym HTML strony przekierowującej 301 jest wyświetlany jako:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://www.website.com/webpage.htm">here</a>.</p>
</body></html>

Muszę przekierowywać strony HTML bez obsługi serwera. Jeśli zastąpię strony html powyższym kodem, czy będzie to działać tak samo, jak zapisanie przekierowań 301 w .htaccess na Apache? Sprawdziłem to w Google, ale witryny, w których mówi się o przekierowaniach 301, nie obejmowały tej opcji przekierowywania stron HTML.

JMC
źródło

Odpowiedzi:

18

Idealnie wyślesz kod statusu odpowiedzi HTTP 301. Jeśli nie możesz tego zrobić, natychmiastowe metaodświeżenie również będzie działać i będzie liczone jako przekierowanie 301 lub 302, w zależności od wyszukiwarki .

<meta http-equiv="refresh" content="0;url=http://example.com/new.html">

Częstotliwość odświeżania musi wynosić zero, aby uznać ją za przekierowanie 30x.

John Conde
źródło
Dzięki, ten artykuł bardzo dobrze opisuje proces. 0 opóźnienie meta odświeżania w moim przykładzie HTML powyżej = biedny człowiek 301.
JMC
10

Nie, zwykłe zastąpienie kodu HTML przykładem nie osiągnie oczekiwanego efektu. Po prostu pokaże tę stronę użytkownikowi, ponieważ Apache wyśle ​​wraz z nią kod statusu „200”. Użytkownicy będą mogli kliknąć link, aby znaleźć stronę, ale nie nastąpi to automatycznie, a pająki nie będą wiedziały, że masz zamiar dokonać stałego przekierowania zasobu.

Będziesz musiał użyć właściwej dyrektywy Przekierowanie lub _mod_rewrite_ w plikach .htaccess lub Apach conf .

Alternatywnie, jeśli faktycznie używasz PHP lub czegoś podobnego, możesz ustawić kod powrotu na 301, wypisz nagłówek odpowiedzi Lokalizacja, a wtedy twoje rozwiązanie oparte na stronie będzie działać. W PHP wyglądałoby to mniej więcej tak:

<?php
header( "HTTP/1.1 301 Moved Permanently" );
header( "Location: http://www.new-url.com" );
Hissohathair
źródło
+1 Dobre punkty o kodzie stanu 200. Nie myślałem o tym. Niestety jest to serwer IIS i nie mam dostępu głębszego niż ftp. Strony są w formacie .html, więc przekierowanie asp nie będzie przetwarzane.
JMC
W takim przypadku odpowiedź Johna Conde'a jest najlepsza - zapomniałem o równoważności meta refresh.
Hissohathair
3

Zgadzam się z Hissohathair, że twoje podejście nie przekieruje. Użytkownicy mogą wiedzieć, że kliknęli link, ale oryginalna strona nadal zwróci normalny kod stanu „200” i będzie nadal wyświetlać się w wynikach wyszukiwania (prawdopodobnie nie do końca tego, czego chcesz).

Aby utrzymać pozycję strony, kody stanu 301 są niezwykle ważne. Dodanie metatagów odświeżających jest również dobrą opcją i może pomóc w większości przypadków (zgodnie z odpowiedzią Johna), ale nie można zagwarantować, że wyszukiwarki zaakceptują je jako przekierowanie 301 w przyszłości. Dodanie odpowiednich przekierowań do pliku .htaccess (lub plików conf Apache) byłoby najlepszą opcją, aby zagwarantować wysłanie kodu stanu 301.

Edytować:

=======================

W przypadku witryny internetowej IIS7, o ile zainstalowany jest moduł Przepisz adres URL IIS, możesz utworzyć reguły przekierowania w pliku web.config dla witryny. Te zasady miałyby również zastosowanie do plików .html. Więcej informacji tutaj:

http://learn.iis.net/page.aspx/461/creating-rewrite-rules-for-the-url-rewrite-module/

=======================

Inną alternatywą, jeśli twój hosting nie ma możliwości .htaccess / mod_rewrite, może być zmiana używanego hosta, w którym możesz skonfigurować przekierowania po stronie serwera. Tak długo, jak witryna jest odpowiednio przenoszona, powinna być dość płynna dla użytkowników. Takie podejście byłoby stosowane tylko w skrajnych przypadkach, jeśli utrzymanie pozycji strony jest bardzo ważne.

Obrabować
źródło