Creating descriptive storefront URLs when duplicate keywords exist
You can use the Data Load utility, seourlkeywordgen utility,
or canonical URLs to create descriptive URLs that avoid unwanted characters in your URLs when
duplicate keywords exist.
Catalog structures can have categories or products that share names but are different.
For example, if your store provides apparel products, you can have a Shirt category
under a Womens category and another Shirt category under a
Mens category. Given this structure, you might want to have the following URLs for your categories:
- http://example.site.com/shop/en/samplestore/womens/shirt
- http://example.site.com/shop/en/samplestore/mens/shirt
This limitation causes
the utility to default to generating alternative keywords that are based on a combination of various attributes:
- For categories, the alternative keyword that is generated is the combination of the category name, category identifier, and language identifier.
- For products, the alternative keyword that is generated is the combination of the product name, product part number, and language identifier.
- http://example.site.com/shop/en/samplestore/womens/shirt
- http://example.site.com/shop/en/samplestore/mens/shirt10002-1
You have several options to resolve the HCL Commerce SEO limitation of having duplicate keywords in your store. By selecting one of these options, you can create more descriptive SEO friendly URLs for your categories and products, which can optimize your page ranking.
Option 1: Use the Data Load utility to override duplicate keywords
The
Data Load utility supports loading data in a CSV file with Catalog Import without requiring
information included in the file to understand the database schema. If you know which categories or
products have the same name, you can use the Data Load utility to load more meaningful but still
unique keywords. For example, if you want the Shirts category under the
Mens category to have a more meaningful keyword such as shirts-for-him.
The resulting generated URLs can resemble the following URLs:
- http://example.site.com/shop/en/samplestore/womens/shirts
- http://example.site.com/shop/en/samplestore/mens/shirts-for-him
For more information about the Data Load utility, see Overview of the Data Load utility.
Option 2: Configure the seourlkeywordgen utility to use other attributes to resolve keyword conflicts
The SEO-BaseComponentLogic.jar file contains several XML files that are
located within the com\ibm\commerce\seo\loader directory. The
SEO-BaseComponentLogic.jar file is located within the following directory:
- WC_profiledir/ts.ear/SEO-BaseComponentLogic.jar
For example, the
following code snippet is a sample of some of the contents within the
com\ibm\commerce\seo\loader\category.xml file:
For example, if you want to use the
<parameter generatorId="paramShareLanguage" subClass="EnvParameterGenerator" seed="shareURLKeywordForAllLanguages" />
<parameter generatorId="paramStoreId" subClass="EnvParameterGenerator" seed="storeId" />
<parameter generatorId="paramCatalogId" subClass="EnvParameterGenerator" seed="catalogId" />
1<parameter generatorId="paramCatGroupKeyword" subClass="EnvParameterGenerator" default="NAME" />
2<parameter generatorId="paramCatGroupKwd2" subClass="EnvParameterGenerator" default="NAME+CATGROUP_ID+LANGUAGE_ID" />
<parameter generatorId="paramChangeF" subClass="ValueGenerator" seed="N" isString="true" />
<parameter generatorId="paramPriority" subClass="ValueGenerator" seed="0" />
….
3<query>
<select>
CATGROUP.CATGROUP_ID, CATGRPDESC.NAME, CATGRPDESC.LANGUAGE_ID
</select>
<from>
CATGROUP, CATGRPREL, CATTOGRP, CATGRPDESC, STOREENT
</from>
…..
</query>
Parameter | Description |
1 | The paramCatGroupKeyword parameter is the field that is used to generate
the SEO keyword for the category. As shown previously, the NAME attribute is used
as the keyword. |
2 | For a duplicate SEO keyword, the paramCatGroupKwd2 parameter is the field
that is used to generate the alternative keyword for the category. |
3 | You can use any columns from the database table that the query is accessing. To use more
columns, you can add the column name to the select tag. Likewise, if you want to
use columns from a custom table, you must add the custom table name to the from
tag. |
field1
column from the CATGROUP table as part of the alternative keyword, your category.xml
file can contain the following
code:<parameter generatorId="paramCatGroupKeyword" subClass="EnvParameterGenerator" default="NAME" />
<parameter generatorId="paramCatGroupKwd2" subClass="EnvParameterGenerator" default="NAME+FIELD1" />
<query>
<select>
CATGROUP.CATGROUP_ID, CATGRPDESC.NAME, CATGRPDESC.LANGUAGE_ID, CATGROUP.FIELD1
</select>
<from>
CATGROUP, CATGRPREL, CATTOGRP, CATGRPDESC, STOREENT
</from>
….
</query>
Another
example is if you want to use the NAME
and myField
column from a
custom table that is called MYTABLE. To use these columns as the first choices for a keyword, your
category.xml file could contain the following code:
<parameter generatorId="paramCatGroupKeyword" subClass="EnvParameterGenerator" default="NAME+MYFIELD" />
<parameter generatorId="paramCatGroupKwd2" subClass="EnvParameterGenerator" default="NAME+MYFIELD+CATGROUP_ID" />
<query>
<select>
CATGROUP.CATGROUP_ID, CATGRPDESC.NAME, CATGRPDESC.LANGUAGE_ID, MYTABLE.MYFIELD
</select>
<from>
CATGROUP, CATGRPREL, CATTOGRP, CATGRPDESC, STOREENT, MYTABLE
</from>
….
</query>
After
you change your XML files, you must rerun the seourlkeywordgen utility for these
new rules to take effect.Option 3: Use canonical URLs instead of hierarchical URLs
You can also
consider using the canonical URL pattern instead of the hierarchical URL pattern for your storefront
URLs.
Note: There is no tooling available to help you generate your descriptive keywords when you
use this option. You must change your keywords manually within Management Center or use the Data
Load utility to load new keywords.
The HCL Commerce starter store JSP files
use the hierarchical URL pattern to construct the breadcrumb trail and all category links in the
header. If you want to use canonical URL patterns, your URLs do not contain the catalog hierarchy.
To use the canonical URL pattern, you must change your store JSP code to use the canonical URL
pattern name. This name is used to construct the storefront URLs for your categories and products:
- For categories, you must change the JSP that constructs the category URLs to use the CanonicalCategoryURL pattern
- For products, you must change the JSP that constructs the product URLs to use the ProductURL pattern
The canonical URL patterns are defined in the
workspace_dir/crs-web/WebContent/WEB-INF/xml/seo/stores/store_name/SEOURLPatterns-<objectname>.xml files:
- SEOURLPatterns.xml
- SEOURLPatterns-Category.xml
- SEOURLPatterns-Content.xml
- SEOURLPatterns-Product.xml
- SEOURLPatterns-Search.xml
Tip: The URLs constructed for categories in the Aurora starter store
SiteMap.jsp file use the CanonicalCategoryURL pattern. The URLs constructed for
the items added to the mini shop cart in the Aurora starter store
MiniShopCartDisplay_data.jsp use the ProductURL pattern. You can refer to these
JSP files as references.