Optimizing your site for search engines

You can optimize your site for search engines, using techniques to make your site easier to index by a search engine.

Prerequisite

  1. AIX|Linux|Solaris:

    Ensure that you are logged in as the non-root user ID created before installing WebSphere Commerce (wasuser_ID by default).

  2. Enable URL mapping.

    1. Open the WebSphere Commerce configuration file.

    2. Ensure that the UrlMapperConfig component is enabled, as shown in the following example
      <component compClassName="com.ibm.commerce.datatype.UrlMapperConfig" 
              enable="true" 
              name="UrlMapperConfig">
           <property UrlMapperFile="mapper/SEOUrlMapper.xml" display="false" />
      </component>
      

  3. Deploy the updated WebSphere Commerce configuration file.

  4. Identify the JSP pages that you want the search engine to index. Usually, these are catalog-related pages such as ProductDisplay and CategoryDisplay.

  5. Optional: Create a site map.

    1. Create a subdirectory for the site map pages; for example:

    2. Copy each of the JSP pages that you identified in step 3, as well as any pages included in them, into the SiteMap subdirectory.

    You can now perform any further optimization, including conversion to static URLs in step 7, on the site map pages in place of the original pages.

  6. Add URL mappings to the URL mapping file.

    1. Open the SEOUrlMapper.xml file. Its location is specified in the WebSphere Commerce configuration file and defaults to the WCDE_installdir/xml/mapper directory.

    2. If you are using a site map, specify the location of the site map subdirectory with the subDirectory attribute of the pathInfo_mappings element. For example:
      <pathInfo_mappings separator="_" subDirectory="SiteMap">
      
      WebSphere Commerce adds the subDir=SiteMap name-value pair, which indicates that the site map JSP pages are located in the SiteMap directory, to the set of properties associated with the current request.

    3. Create or modify a pathInfo_mapping element for each command associated with the JSP pages that you identified in step 3. Typically these commands are:

      • ProductDisplay

      • CategoryDisplay

      • TopCategoriesDisplay

      • StoreCatalogDisplay

      For the ProductDisplay command, for instance,

      webapp/wcs/stores/servlet/ProductDisplay?storeId=10001&catalogId=10001&productId=10032&langId=-1

      should map to

      <mappings><pathInfo_mappings separator="_" ... >
      <pathInfo_mapping name="product" requestName="ProductDisplay">
              <parameter name="storeId" />
              <parameter name="catalogId" />
              <parameter name="productId" />
              <parameter name="langId" />
      </pathInfo_mapping>
      ...
      </pathInfo_mappings>
      </mappings>
      

    • The recommended separator is an underscore (_) . Use forward slash (/) as a separator if all your JSP pages use absolute paths when referencing URLs and images. Examples of absolute and relative path are as follows:

      absolute path

      <a href="/webapp/wcs/stores/servlet/CategoryDisplay?storeId=10001 ... >

      relative path

      <a href="CategoryDisplay?storeId=10001 ... >

  7. If you are using a site map, set up separate caching for the site map pages by adding a component element with the ID of subDir to your site's cachespec.xml file for each command associated with the JSP pages that you identified in step 3. As an example, the portion of the cachespec.xml file that pertains to the TopCategoriesDisplay command should now look as follows
    <!-- TopCategoriesDisplay?storeId=<storeId>&catalogId=<catalogId> -->
    <cache-id>
    <component id="" type="pathinfo">
           <required>true</required>
           <value>/TopCategoriesDisplay</value>
    </component>
    <component id="storeId" type="parameter">
           <required>true</required>
    </component>
    <component id="catalogId" type="parameter">
           <required>true</required>
    </component>
    ...
    <component id="subDir" type="parameter">
           <required>true</required>
    </component>                     
    <component id="DC_lang" type="attribute">
        <required>true</required>
    </component>
    <component id="DC_curr" type="attribute">
        <required>true</required>
    </component>
    ...
    </cache-id>
    

  8. Convert JSP pages with dynamic URLs to JSP pages with static URLs using any of the following methods:

    1. URL Mapping Perl Script for standard JSP (urlmapping.pl)

      This will convert a:href url syntax such as:

      CategoryDisplay?catalogId=<%=catalogId%>&categoryId=<%=category.getCategoryId()%>&storeId=<%=storeId%>
      

      to

      Category_<%=catalogId%>_<%=storeId%>_<%=category.getCategoryId()%>
      

      Prerequisite: Perl application is installed and executable on your machine Command syntax:

      perl WC_installdir/samples/urlmapping/bin/urlmapping.pl URL_Mapping_File target_directory starting_directory

      or

      perl WC_installdir/samples/urlmapping/bin/urlmapping.pl URL_Mapping_File target_directory file

      Parameters:

      URL_Mapping_File

      The name of the URL Mapping file.

      target_directory

      The directory where the JSP files will be output.

      starting_directory

      The name of the directory containing the dynamic JSP files.

      file

      The name of a specific file to convert.

      Example: perl WC_installdir/samples/urlmapping/bin/urlmapping.pl mapper/SEOUrlMapper.xml SiteMap test Limitations: This script does not handle JSTL or tags generated dynamically by either Java or other scripts such as out.println("<a href=\"AugInterest?aucItemId=<%=aucId%>\">")

    2. URL Mapping Java Application for JSTL (URLMappingConvertor)

      This will convert <c:url> tag syntax such as:

           <c:url var="TopCategoriesDisplayURL" value="TopCategoriesDisplay">
              <c:param name="storeId" value="${WCParam.storeId}" />
              <c:param name="catalogId" value="${WCParam.catalogId}" />
              <c:param name="langId" value="${langId}" />
           </c:url>
      

      to

           <c:url var="TopCategoriesDisplayURL" 
                value="TopCategoriesDisplay_${WCParam.storeId}_${WCParam.catalogId}_${langId}" />
      

      Prerequisite: Java executable is allowed to run in the command prompt window or Unix terminal Command syntax:

      java com.ibm.commerce.util.URLMappingConvertor URL_Mapping_File target_directory 
      
      Parameters:

      URL_Mapping_File

      The name of the URL Mapping file.

      target_directory

      The directory where the JSP files will be output. The JSP files in all subdirectories under this target_directory will also be updated.

      There is one additional parameter – the classpath needs to be specified if it's not set already. If the classpath is not set you will get ClassNotFound exceptions. For example

      java -classpath Enablement-BaseComponentsLogic.jar com.ibm.commerce.util.URLMappingConvertor URL_Mapping_File target_directory
      

      Example:

      java com.ibm.commerce.util.URLMappingConvertor WC_eardir/xml/mapper/SEOUrlMapper.xml SiteMap
      
      Limitations:

      1. Any tags other than <c:param> within <c:url> will be ignored. For example
               <c:url var="ProductDisplayURL" value="ProductDisplay">
                  <c:param name="productId" value="${product.productID}" />
                  <c:param name="langId" value="${langId}" />
                  <c:param name="storeId" value="${WCParam.storeId}" />
                  <c:param name="catalogId" value="${WCParam.catalogId}" />
                  <c:if test="${ !empty WCParam.parent_category_rn }" >
                    <c:param name="parent_category_rn" value="${WCParam.parent_category_rn}" />
                    <c:param name="view" value="imageView" />
                  </c:if>
                </c:url>
        

        will become:

                <c:url var="ProductDisplayURL" value="ProductDisplay_${product.productID}_${langId}_${WCParam.storeId}_${WCParam.catalogId}_
                        ${WCParam.parent_category_rn}"">
                  <c:param name="view" value="imageView" />
                </c:url>
        

      2. This script does not handle standard JSP tags or tags generated dynamically by either Java or other scripts. For example
        out.println("<a href=\"AugInterest?aucItemId=<%=aucId%>\">").
        

    3. Manually, change the dynamic URLs in JSP pages to static URLs.

  9. If you are using a site map, include a link to the site map starting page from the header, footer, or sidebar.

  10. Deploy the changed files.

Related concepts

Search engine optimization
Dynamic caching

Related tasks

Configure cacheable objects
Create store pages that can be cached using cachespec.xml
Updating page content