2013-11-24 1 views
2

В моем файле web.xml я настроил:Использование перенаправления вместо вперед на <приветственного-файл>

<welcome-file-list> 
    <welcome-file>index.xhtml</welcome-file> 
</welcome-file-list> 

Это означает, что при вводе URL www.domain.com, index.xhtml файла используется для визуализации. Но когда я набираю www.domain.com/index.xhtml, результат будет таким же. - это дублированный контент? Это не проблема для моего проекта, но большая проблема для SEO. Как перенаправить на страницу www.domain.com/index.xhtml при вводе URL-адреса www.domain.com вместо того, чтобы позволить ему выполнить пересылку?

+0

Запрос на 'www.domain.com/index.xhtml' является тем же, что' index.xhtml', вероятно, находится в вашей папке webapps, которая является общедоступной. –

+0

Ваши права. Но я просто хочу избежать дублирования контента. как это сделать. Вы имеете в виду, теперь мне нужно скрыть index.xhtml и отредактировать web.xml –

ответ

2

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-адреса в любом случае.

Другой способ - настроить перенаправление HTTP 301 на URL предпочтения. Очень важно понять, что источник перенаправления 302 по-прежнему индексируется поисковыми роботами, но происхождение 301 перенаправления не выполняется, только индексируется только целевая страница. Если вы будете использовать 302 по умолчанию, используя HttpServletResponse#sendRedirect(), тогда вы все равно получите дублирующийся контент, потому что оба URL-адреса по-прежнему индексируются.

Вот пример запуска такого фильтра. Просто нарисуйте его на /index.xhtml и выполните 301 переадресацию, когда URI не соответствует желаемому пути.

@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. 
} 
0

Чтобы удалить дублирующийся контент, создайте фильтр с URL-сообщением /*. Если пользователь в корневом домене перенаправляется на адрес index.xhtml.

@WebFilter(filterName = "IndexFilter", urlPatterns = {"/*"}) 
public class IndexFilter implements Filter { 

    public void doFilter(ServletRequest req, ServletResponse resp, 
     FilterChain chain) 
     throws IOException, ServletException { 
    HttpServletRequest request = (HttpServletRequest) req; 
    HttpServletResponse response = (HttpServletResponse) resp; 
    String requestURL = request.getRequestURI().toString(); 
    if (request.getServletPath().equals("/index.xhtml") && 
       !requestURL.contains("index.xhtml")) { 
     response.sendRedirect("http://" + req.getServerName() + ":" 
       + request.getServerPort() + request.getContextPath() 
       +"/index.xhtml"); 
    } else { 
     chain.doFilter(req, resp); 
    } 
} 
} 
+0

'sendRedirect()' делает 302, а не 301. Остаток кода фильтра тоже не увлекательный, а он выполняет свою работу, он четко написан стартером, и несколько вещей могут быть сделаны более чистыми. – BalusC

+0

Спасибо @Masud, но я хочу спросить больше. Это явление называется дублированным контентом? –

+0

Я не думаю, что он может что-то сказать о SEO правильно, потому что он уже не перенаправляет 301 на первое место. – BalusC