同じドメインにまったく同じ応答を返す別の URL がある場合、その URL は重複コンテンツとしてマークされます。はい、SEOが重要な場合は、間違いなくこれについて心配する必要があります.
これを修正する最も簡単な方法は、 の先頭にいわゆる正規 URL を提供することですindex.xhtml
。これは、好みの URL を表す必要があります。これは、特定のケースでは明らかにファイル名を持つものです。
<link rel="canonical" href="http://www.domain.com/index.xhtml" />
このように、http://www.domain.com
は として索引付けされhttp://www.domain.com/index.xhtml
ます。コンテンツが重複することはもうありません。ただし、これによってエンドユーザーが別の URL をブックマーク/共有できなくなるわけではありません。
もう 1 つの方法は、設定した URL への HTTP 301 リダイレクトを構成することです。302 リダイレクトの発信元は引き続き検索ボットによってインデックス化されますが、301 リダイレクトの発信元ではなく、ターゲット ページのみがインデックス化されることを理解することは非常に重要です。でデフォルトで使用される 302 を使用するHttpServletResponse#sendRedirect()
と、両方の URL がまだインデックス化されているため、コンテンツが重複することになります。
このようなフィルターのキックオフの例を次に示します。/index.xhtml
URI が目的のパスと一致しない場合は、マップして 301 リダイレクトを実行するだけです。
@WebFilter(urlPatterns = IndexFilter.PATH)
public class IndexFilter implements Filter {
public static final String PATH = "/index.xhtml";
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String uri = request.getContextPath() + PATH;
if (!request.getRequestURI().equals(uri)) {
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); // 301
response.setHeader("Location", uri);
response.setHeader("Connection", "close");
} else {
chain.doFilter(req, res);
}
}
// init() and destroy() can be NOOP.
}