jsf - 在 <welcome-file> 上使用重定向而不是转发

标签 jsf redirect seo web.xml welcome-file

在我的 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 来说是个大问题。 在输入 URL www.domain.com 时,如何重定向到 www.domain.com/index.xhtml 页面,而不是让它执行转发?

最佳答案

当同一域上的另一个 URL 返回完全相同相同的响应时,该 URL 会被标记为重复内容。是的,如果 SEO 很重要,您绝对应该担心这一点。

解决此问题的最简单方法是在 index.xhtml 的头部提供所谓的规范 URL。这应该代表首选的 URL,在您的特定情况下,显然是带有文件名的 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 重定向的来源不会,只有目标页面被索引。如果您使用 HttpServletResponse#sendRedirect() 默认使用的 302,那么您最终仍会获得重复的内容,因为这两个 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.
}

关于jsf - 在 <welcome-file> 上使用重定向而不是转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20177129/

相关文章:

javascript 数组和 jsf/richfaces

jsf - JS 功能未通过 PrimeFaces.monitorDownload 触发

jsf - 如何在 Facelets 模板中引用 CSS/JS/图片资源?

javascript - 使用 AngularJS $http 到 POST 时,PassportJS 重定向不起作用

redirect - Jekyll 重定向不是在 GitHub 上生成的

java - Faces Bean 验证在 Glassfish 3.1.1 上不起作用

javascript - 如何避免重复的元标记?

seo - http-equiv 刷新和 SEO

完整路径和关闭电流之间的 Html 路径区别?

javascript - chrome.webRequest.onBeforeRequest 仅重定向最后一个 URL