SEO in ATGKate Semizhon
Agenda
SEO Repository: SEO Tags
Sitemaps SEF URLs
SEO REPOSITORY
DEMO
DEMO
/atg/seo/SEORepository
Rendering SEO Tags on Pages
<dsp:droplet name="/atg/dynamo/droplet/RQLQueryRange"> <dsp:param name="repository" value="/atg/seo/SEORepository" /> <dsp:param name="itemDescriptor" value="SEOTags" /> <dsp:param name="howMany" value="1" /> <dsp:param name="mykey" value="featured" /> <dsp:param name="queryRQL" value="key = :mykey" /> <dsp:oparam name="output">
<title><dsp:valueof param="element.title"/></title> <dsp:getvalueof var="description" param="element.description"/> <dsp:getvalueof var="keywords" param="element.keywords"/> <meta name="description" content="${description}" /> <meta name="keywords" content="${keywords}"/>
</dsp:output></dsp:droplet>
Rendering SEO Tags on Pages
<dsp:droplet name="/atg/dynamo/droplet/RQLQueryRange"> <dsp:param name="repository" value="/atg/seo/SEORepository" /> <dsp:param name="itemDescriptor" value="SEOTags" /> <dsp:param name="howMany" value="1" /> <dsp:param name="pageURL" bean="/OriginatingRequest.servletPath" /> <dsp:param name="queryRQL" value="key = :pageURL" /> ...</dsp:droplet>
SITE MAP
Siteindex.xml
Steps of creating site maps
SitemapGeneratorService creates sitemaps stores in SitemapRepository
SitemapWriterService writes out the actual XML files
Ways to invoke sitegeneration
run automatically
run automatically after a CA deployment
invoking them manually
SitemapGeneratorService
SitemapGeneratorService
$class=atg.sitemap.SitemapGeneratorService$scope=global
schedule=calendar * * . . 1 .scheduler=/atg/dynamo/service/SchedulerclientLockManager=/atg/dynamo/service/ClientLockManagerlockName=SitemapGeneratorService
sitemapGenerators=\ /atg/sitemap/ProductSitemapGenerator,\ /atg/sitemap/CategorySitemapGenerator,\ /atg/sitemap/StaticSitemapGeneratorsitemapIndexGenerator=/atg/sitemap/SitemapIndexGenerator
sitemapRepository=/atg/sitemap/SitemapRepositorysitemapPropertiesManager=/atg/sitemap/SitemapPropertiesManagersitemapTools=/atg/sitemap/SitemapTools
maxUrlsPerSitemap=10000maxSitemapSize=5000000
SitemapGeneratorService
ProductSitemapGenerator
# /atg/sitemap/ProductSitemapGenerator.properties$class=atg.commerce.sitemap.CatalogSitemapGenerator
sitemapFilePrefix=productSitemapchangeFrequency=weekly# Type of repository item to retrieve itemDescriptorName=product
CategorySitemapGenerator
#/atg/sitemap/CategorySitemapGenerator.properties$class=atg.commerce.sitemap.CatalogSitemapGeneratorchangeFrequency=weeklysitemapFilePrefix=categorySitemap# Type of repository item to retrieve itemDescriptorName=category
StaticSitemapGenerator
# atg/sitemap/StaticSitemapGenerator.properties$class=atg.sitemap.StaticSitemapGeneratorsitemapFilePrefix=staticSitemap# List of static pagesstaticPages=index.jsp,\ browse/whatsNew.jsp,\ browse/asSeenIn.jsp,\ browse/featureGlossary.jsp
SitemapWriterService
# /atg/sitemap/SitemapWriterService.properties$class=atg.sitemap.SitemapWriterService$scope=global
# The directory where an application's war is locatedwarDir^=/atg/sitemap/SitemapGeneratorService.warDir
SEF URLS
SEF URLs
/mystore/product.jsp?prodId=prod1002&catId=cat234
/mystore/Q33+UltraMountain/Mountain+Bikes
URL Generating
Item
LinkTemplate
MapperDirect
TemplateSEF URL
Maps item to template
Droplet with element id as
parameterURL converter
CatalogItemLink
<dsp:droplet name="CatalogItemLink"> <dsp:param name="item" param="childCategory"/> <dsp:oparam name="output"> <%-- Create link for subcategory --%> <dsp:a page="${url}"> <dsp:valueof param="childCategory.displayName"/> </dsp:a> </dsp:oparam> </dsp:droplet>
CatalogItemLink
# /atg/repository/seo/CatalogItemLink.properties$class=atg.repository.seo.ItemLink
# Map of UrlTemplateMapper components by item descriptor name for this dropletitemDescriptorNameToMapperMap=\ product=/atg/repository/seo/ProductTemplateMapper,\ category=/atg/repository/seo/CategoryTemplateMapper
# Default parameter valuesdefaultRepository=/atg/commerce/catalog/ProductCatalogdefaultItemDescriptorName=product
CategoryTemplateMapper
#/atg/repository/seo/CategoryTemplateMapper.properties$class=atg.repository.seo.UrlTemplateMapperImpl
# List of UrlTemplate component namestemplates=\ /atg/repository/seo/CategoryIndirectTemplate
# Default template to use if no match in list abovedefaultTemplate=/atg/repository/seo/CategoryDirectTemplate
CategoryDirectTemplate
#/atg/repository/seo/CategoryDirectTemplate.properties$class=atg.repository.seo.DirectUrlTemplate
# Url template formaturlTemplateFormat={item.template.url,encode=false}?categoryId\={item.id}
URLTemplate
URL parsing
JumpServlet Template ATG URL
JumpServlet
<servlet> <servlet-name>MappedJumpServlet</servlet-name> <servlet-class>atg.repository.seo.MappedJumpServlet</servlet-class> <init-param> <param-name>jumpServlet</param-name> <param-value>ctx:dynamo:/atg/repository/seo/JumpServlet</param-value> </init-param></servlet><servlet-mapping> <servlet-name>MappedJumpServlet</servlet-name> <url-pattern>/jump/*</url-pattern></servlet-mapping>
Thanks!