SEO – 知識家 提供SEO教學、SEO工具 帶您以深入淺出的方式認識 Search Engine Optimization 搜尋引擎最佳化
  • [SEO技術] 如何去除jsessionid?

    jsessionid

    什麼是jsessionid?

    由jsp製作的網頁,需要靠session聯繫客戶端和伺服端,而session預設是存在客戶端的cookie裡,當客戶端的cookie被使用者關閉,jsp就會利用url rewrite的方式傳值,而參數就是jsessionid,若隨後的請求中cookie又被啟動,那麼jsessionid將會自動消失。

    如:www.domain.com/index.html;jsessionid=76F86C419044ECBF42

    jsessionid與SEO有什麼關係?

    關係可大了,由於搜尋引擎並沒有cookie,而當spider在crawl頁面時,因所有被jsp rewrite過的url都會自動帶有jsessionid的參數

    帶有jsessionid的網址

    所以spider又會沿著這些帶有參數的連結index到下個頁面,如此一來,整個網站就會收錄大量具有jsession參數的頁面,與原本的網頁形成大量重複頁面,最嚴重的是網站的Interal Link全毀了!

    從圖中可以看到backlink只剩1,且唯一的backlink居然還是透過sitemap.xml進來。

    backlink只剩1

    Yahoo和Google怎麼樣看jsessionid?

    經過Hank觀察,Yahoo在cache頁面時,cache的頁面一定會有jsessionid
    所以,所有偽靜態頁面都一定會抓不到backlink。才會發生剛剛所說backlink只抓到一個sitemap.xml的link
    而Google雖然cache也有同樣的問題,但發現google比較聰明,可以分辨jsessionid是同一頁,所以backlink方面沒有問題。
    但不論yahoo或google都會收錄jsessionid頁面,如此還是可能有重覆頁面的可能,至於Bing和百度還沒時間去研究,有研究出來的人記得寫信告訴Hank哦。

    如何去除jsessionid?

    這個方法是Hank在網路上找的,但Hank不熟jsp,不知如何修改原始碼,但透過熟jsp的工程師得知,方法很簡單,只需要在filter上動點手腳就可以解決。

    原始碼:

    
    package filter; 
    
    import java.io.IOException; 
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession; 
    
    public class RemoveJsessionFilter implements Filter { 
    
     public void destroy() {
      // TODO Auto-generated method stub 
    
     } 
    
     public void doFilter(ServletRequest request, ServletResponse response,
       FilterChain chain) throws IOException, ServletException {
      // TODO Auto-generated method stub
      Hsrw wrappedResponse = clearSessionId(request, response);
       chain.doFilter(request, wrappedResponse);
     } 
    
     public void init(FilterConfig arg0) throws ServletException {
      // TODO Auto-generated method stub 
    
     }
     private Hsrw clearSessionId(ServletRequest request, ServletResponse response) {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        // clear session if session id in URL
        if (httpRequest.isRequestedSessionIdFromURL()) {
         HttpSession session = httpRequest.getSession();
         if (session != null)
          session.invalidate();
        }
        Hsrw wrappedResponse = new Hsrw(httpResponse);
        return wrappedResponse;
        // process next request in chain
       }
    }
    

    Web配置:

    
    <filter>
    <filter-name>RemoveJsessionFilter</filter-name>
    <filter-class>filter.RemoveJsessionFilter</filter-class>
    </filter> 
    
    <filter-mapping>
    <filter-name>RemoveJsessionFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    <servlet-mapping>
    

    歡迎轉載分享,請註明出處來自於SEO – 知識家

    相關文章:

    發佈於 九月 1, 2010 · 分類: SEO教學; 標籤: , ,
    5 Comments

5 Responses to “[SEO技術] 如何去除jsessionid?”

  1. Hank站長您好

    我想請問一下您知道google apps的功用嗎?

    如果知道的話可以教我怎麼設定嗎~感恩~

  2. 不好意思~沒研究過^^"

  3. 恩~沒關係
    感謝你~^^

  4. Very nice post!

  5. 動態網址本來就對SEO不友善
    我剛才看到文章 才知道什麼是jsession

我要回應

*

最新訊息

文章分類

統計

免費計數器