Smarter SEO for Smarter Commerce
Search engines, such as Google, are one of the most important channels for customers to reach your store. Using search engine optimization (SEO) to improve page ranking can result in increased traffic and revenue. We can understand its importance deeply and this is our attempt at understand the OOB capabilities of WCS 7 with regards to SEO and how it can be used for a Smarter Commerce.
If URL construction using patternName fails (due to an invalid patternName or a missing parameter), dynamic URL's will be constructed if the dynamicUrl attribute is set to true. If dynamicUrl is set to false, then wcf:url tag returns defaultUrl specified in wc-server.xml
Please refer the below Infocenter link to get your familiarized with the SEO data model :
http://publib.boulder.ibm.com/infocenter/wchelp/v7r0m0/topic/com.ibm.commerce.data.doc/refs/rdmSEOfep3.htm

Pattern files are used in the construction and deconstruction
of SEO friendly URLs. A pattern file contains a template or model
for a URL type in a store, such as a category, contact us or product
page as each page type requires different data to be constructed.
For for details , please refer the Infocenter link.
Pattern files are located in this path :
The below diagram summarizes all the important learnings and explains how the SEO URLs are created based on the pattern definitions in the SEOURLPatterns.xml.
Let us revisit and do some practical based on the concepts learned on Day 1 to Day 3.
In this demo tuturial , we will create a short SEO friendly URL for a custom view that we have created "SuggestionsComplaintsView" using the WCS 7 SEO Pattern mapping files in simple 3 steps.
We will change the long WCS URL
http://localhost/webapp/wcs/stores/servlet/SuggestionsComplaintsView?storeId=10051&catalogId=10051&langId=-1
to
Short Search Engine optimized URL
http://localhost/webapp/wcs/stores/servlet/en/madisons/suggestion-complaints
Pack up your energy drinks and lets sprint into the SEO world. I hope you will find it in useful.
Demo Video:
Help Section:
The JSPs and XMLs used in this demo can be downloaded from this link.
Pattern Definition made in the SEOURLPatterns-ext.xml
SQL Executed
insert into seotokenusgtype (tokenusgtype_id, tokenusgtype, primarytoken,storeent_id, isstatic) values ((select counter+1 from KEYS where tablename='seotokenusgtype') , 'SuggestionComplaints', 'SuggestionComplaintsToken',<store-id>, 1);
update KEYS set counter=counter+1 where tablename='seotokenusgtype';
insert into seourl (seourl_id, tokenname, tokenvalue) values ((select counter+1 from KEYS where tablename='seourl'), 'SuggestionComplaintsToken', 'SuggestionComplaintsToken');
insert into seourlkeyword (seourlkeyword_id, seourl_id, storeent_id,language_id, urlkeyword, status) values((select counter+1 from KEYS where tablename='seourlkeyword'), (select seourl_id from seourl where tokenname='SuggestionComplaintsToken'), <store-id>, -1, 'suggestion-complaints', 1);
update KEYS set counter=counter+1 where tablename='seourl';
update KEYS set counter=counter+1 where tablename='seourlkeyword';
URL redirect traffic
In order to help with performance, redirect traffic data is not sent to the database on each use of a redirect rule. Instead that data is stored in a cache, and is only flushed to the database once a certain number of redirect usages has occurred. This number is configurable by referring to the redirectHitCountBatchUpdateSize parameter in the SEORuntime section of the wc-admin-component.xml infrastructure configuration file.
Removing unused URLs
When redirect mappings
have not been used for some time it is safe to delete both the mapping
and the original URL that is being redirected to decrease your database
footprint. Unused redirected URLs are cleaned up automatically after
60 days by running a scheduler job. This number is the default out-of-the-box
but is configurable by referring to the "numberOfDays" value in the
SEORuntime section of the wc-admin-component.xml
infrastructure configuration file.
This command will delete entries from the SEOREDIRECT, SEOREDIRECTTRAFFIC, SEOURLKEYWORD and SEOURL tables.
Title and metadata information
is valuable for allowing your store's pages to stand out on the
internet. With the search engine optimization feature for WebSphere
Commerce Version 7 Feature Pack 3, each web page in your store is
provided with unique content to improve its ranking in search results.
The title and meta description data is comprised of:
Page title
The page title appears in the customer's browser's title bar For example: Large Adjustable Desk Lamp | Madisons
Meta description
The meta description is used by search engines to provide a description of your site and the current web page's contents for a search results page. It is stored in the web pages HTML and is not viewable on the page itself.
Meta keyword
The meta keyword is used for your store's static pages such as the contact us or help page for search engines to accurately rank and index the web page. It is stored in the web page's HTML and is not viewable on the page itself.
Image alt text
Image alt text describes the contents of an image for search engines to accurately rank and index the image. It is viewable by hovering over the image on the web page and can be used for text to speech systems for the visually impaired.
The TMD is defined as templates in the SEOPAGEDEF and SEOPAGEDEFDESC tables with the help of the SEO substitution parameters.
Other important tables wrt the TMD is SEOPAGEDEFOVR and SEOPAGEDEFSUBPARAM.
Demo Video
In this demo video , we will learn how to define the TMD for the new static "Suggestions and Complaints" page which we have created in the Day 4 : Demo - Creating short SEO URLs for new static views.We will also understand the OOB tables.
Lets start the final legs of our marathon!
Demo Help Content
SQL Queries
insert into seopagedef (seopagedef_id, pagename, storeent_id, lastupdate, createdtime) values ((select max(seopagedef_id)+1 from seopagedef), 'SUGGESTIONS_PAGE', (select storeent_id from storeent where identifier = 'Madisons'), '2012-04-22 00:00:00.00', '2012-04-22 00:00:00.00');
update keys set counter = counter+1 where tablename like 'seopagedef';
insert into seopagedefdesc (seopagedef_id, language_id, title, meta_desc, meta_keyword, image_alt_desc, lastupdate, createdtime) values ((select max(seopagedef_id) from seopagedef), -1, 'Suggestion and Complaints at <seo: StoreName/>', 'Suggestion and Complaints at <seo: StoreName/>', 'Suggestion and Complaints <seo: StoreName/>', 'Image for Suggestion and Complaints at <seo: StoreName/>', '2012-04-22 00:00:00.00', '2012-04-22 00:00:00.00');
select * from seopagedef where storeent_id = (select storeent_id from storeent where identifier = 'Madisons');
select * from seopagedefdesc where SEOPAGEDEF_ID in (select SEOPAGEDEF_ID from seopagedef where storeent_id = (select storeent_id from storeent where identifier = 'Madisons')) and language_id = -1;
select * from SEOPAGEDEFOVR;
JSP Changes
The SuggestionComplaints.jsp used can be downloaded from this link. Place it in the following directory - /Stores/WebContent/Madisons/StoreInfoArea/
Additional Read
Retrieving search engine optimization (SEO) substitution parameters for populating the Management Center UI
Search engines, such as Google, are one of the most important channels for customers to reach your store. Using search engine optimization (SEO) to improve page ranking can result in increased traffic and revenue. We can understand its importance deeply and this is our attempt at understand the OOB capabilities of WCS 7 with regards to SEO and how it can be used for a Smarter Commerce.
The SEO functionality for WebSphere Commerce Version 7 Feature pack 3
or later improves online search page ranking for your store by creating short,
clean SEO-friendly URLs with meaningful keywords. This version includes enhanced
Management Center tools that business users can use to influence page ranking
by changing the URL and metadata information, an improved Sitemap generator
that indexes all the SEO-friendly URLs, and 301 URL redirect rules.
Search engine optimization for WebSphere Commerce provides
the following functionality:
- Creating simple, static URLs for store pages that shoppers and search robots can easily understand
- Optimizing page meta data to improve search engine page rank
- Creating 301 URL redirection when a web page has moved
- Generating Sitemaps to submit to search engine provider
Day 1 : Introducing "wcf:url" tag
Day 2 : WebSphere Commerce search engine optimization (SEO) data model
Day 3 : Search engine optimization (SEO) URL pattern files
Day 4 : Demo - Creating short SEO URLs for new static views
Day 5 : 301 Redirections for Search Engine Optimization
Day 6 : Title and meta description (TMD) for SEO pages
Day 7 : Generating Sitemaps to submit to search engine providers
Day 2 : WebSphere Commerce search engine optimization (SEO) data model
Day 3 : Search engine optimization (SEO) URL pattern files
Day 4 : Demo - Creating short SEO URLs for new static views
Day 5 : 301 Redirections for Search Engine Optimization
Day 6 : Title and meta description (TMD) for SEO pages
Day 7 : Generating Sitemaps to submit to search engine providers
Day 1 : Introducing "wcf:url" tag
To avoid having to hard code SEO friendly URLs in the
storefront pages, the WebSphere Commerce Search Engine Optimization feature
provides a wcf:url tag that will construct SEO friendly URLs using
the SEO pattern file(s) and tables.
The current wcf:url tag is used by all starter stores to construct SEO friendly URLs. The UrlTag class has been enhanced to support the use of the new URL pattern definition to create SEO friendly URLs.
The current wcf:url tag is used by all starter stores to construct SEO friendly URLs. The UrlTag class has been enhanced to support the use of the new URL pattern definition to create SEO friendly URLs.
Incase you open any JSP , for example CachedFooterDisplay.jsp,
you will notice that our old friend <c:url> tag which was used to
construct the URLs in WCS6 has been replaced by <wcf:url>. So, let us spend some time leaning about the tag.
About the wcf:url tag
The wcf:url tag builds a URL
and applies the appropriate WebSphere Commerce supported rewriting
rules.
It contains the following additions compared
to the c:url tag:
- It builds a full path URL, rather than a relative path.
- It builds SEO compliant URLs if the feature is used in WebSphere Commerce.
- It adds a prefix to the URL with the appropriate protocol, HTTP or HTTPS, depending on the Struts configuration files.
Important Note for FEP3 and above
Both the new Feature Pack
3 and previous SEO implementations are supported. You can choose which SEO
solution to use by updating wc-server.xml.
<SEOConfiguration enable="true" dynamicUrl="true" defaultUrl="www.madisons.com"> <context-root-rewrite value="/shop"/> <mapper-class-name value="com.ibm.commerce.seo.url.helpers.SEOURLMapperImpl"/> </SEOConfiguration>
Either value or patternName is required. If workspace is used, then both value and patternName are required. If the value parameter is provided, then URLs will be constructed based on the mapping found in SEOUrlMapper.xml file using the SEO implementation from WebSphere Commerce Version 7 to Version 7 Feature Pack 2. If patternName is provided and SEO is enabled in wc-server.xml as shown in the following example, then URLs will be constructed based on the Version 7 Feature Pack 3 SEO design, using the pattern template definitions. Preference will be given to the patternName attribute over the value attribute.
If URL construction using patternName fails (due to an invalid patternName or a missing parameter), dynamic URL's will be constructed if the dynamicUrl attribute is set to true. If dynamicUrl is set to false, then wcf:url tag returns defaultUrl specified in wc-server.xml
The URL creation
order is:
- If SEO Enabled and patternName specified, use patternName and
construct new SEO URL
- If new SEO URL construction fails and dynamicUrl = true, a dynamic URL is constructed
- If dynamicUrl = false, a defaultUrl is constructed
- Otherwise the value attribute is used an old SEO URL is constructed
The following diagram helps understand the SEO URL differences and the tag parameters :
Example
The following example forms a URL
to display the shopping cart using the <wcf:url> tag.
It specifies the URL type as an AJAX call.
<wcf:url var="currentShoppingCartLink" value="ShopCartPageView" type="Ajax"> <wcf:param name="storeId" value="${WCParam.storeId}" /> <wcf:param name="catalogId" value="${WCParam.catalogId}"/> <wcf:param name="langId" value="${WCParam.langId}" /> </wcf:url>
Day 2 : WebSphere Commerce search engine optimization (SEO) data model
http://publib.boulder.ibm.com/infocenter/wchelp/v7r0m0/topic/com.ibm.commerce.data.doc/refs/rdmSEOfep3.htm
Day 3 : Search engine optimization (SEO) URL pattern files
For for details , please refer the Infocenter link.
Pattern files are located in this path :
WC_eardir/Stores.war/WEB-INF/xml/seo/stores/storedirectory
WCDE_installdir\workspace\Stores\WebContent\WEB-INF\xml\seo\stores\
The below diagram summarizes all the important learnings and explains how the SEO URLs are created based on the pattern definitions in the SEOURLPatterns.xml.
Day 4 : Demo - Creating short SEO URLs for new static views
In this demo tuturial , we will create a short SEO friendly URL for a custom view that we have created "SuggestionsComplaintsView" using the WCS 7 SEO Pattern mapping files in simple 3 steps.
We will change the long WCS URL
http://localhost/webapp/wcs/stores/servlet/SuggestionsComplaintsView?storeId=10051&catalogId=10051&langId=-1
to
Short Search Engine optimized URL
http://localhost/webapp/wcs/stores/servlet/en/madisons/suggestion-complaints
Pack up your energy drinks and lets sprint into the SEO world. I hope you will find it in useful.
Demo Video:
Help Section:
The JSPs and XMLs used in this demo can be downloaded from this link.
Pattern Definition made in the SEOURLPatterns-ext.xml
<seourl:seoUrlConfiguration
xmlns:seourl="http://www.ibm.com/xmlns/prod/commerce/foundation/SEO/URLPattern"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.ibm.com/xmlns/prod/commerce/foundation/
SEO/URLPattern wc-seo-url-pattern.xsd">
<!--
SuggestionComplaints URL like this: http://localhost/webapp/wcs/stores/servlet/en/madisons/suggestion-complaints -->
<seourl:seoUrlPatternDef name="SuggestionComplaintsURL">
<seourl:seoUrlPattern viewName="SuggestionsComplaintsView">/LanguageToken/StoreToken:CatalogToken/SuggestionComplaintsToken</seourl:seoUrlPattern>
<seourl:urlToParamMapping>
<seourl:mapping name="langId" value="?LanguageToken?" />
<seourl:mapping name="storeId" value="?StoreToken?" />
<seourl:mapping name="catalogId" value="?CatalogToken?" />
</seourl:urlToParamMapping>
<seourl:paramToUrlMapping>
<seourl:mapping name="LanguageToken" value="?langId?"
defaultValue="-1" />
<seourl:mapping name="StoreToken" value="?storeId?" />
<seourl:mapping name="CatalogToken" value="?catalogId?" />
<seourl:mapping name="SuggestionComplaintsToken" value="SuggestionComplaintsToken" />
</seourl:paramToUrlMapping>
<seourl:usageDef CMCPrefix="true">
<seourl:usage device="browser">
<seourl:target>SuggestionComplaints</seourl:target>
</seourl:usage>
</seourl:usageDef>
</seourl:seoUrlPatternDef>
</seourl:seoUrlConfiguration>
xmlns:seourl="http://www.ibm.com/xmlns/prod/commerce/foundation/SEO/URLPattern"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.ibm.com/xmlns/prod/commerce/foundation/
SEO/URLPattern wc-seo-url-pattern.xsd">
<!--
SuggestionComplaints URL like this: http://localhost/webapp/wcs/stores/servlet/en/madisons/suggestion-complaints -->
<seourl:seoUrlPatternDef name="SuggestionComplaintsURL">
<seourl:seoUrlPattern viewName="SuggestionsComplaintsView">/LanguageToken/StoreToken:CatalogToken/SuggestionComplaintsToken</seourl:seoUrlPattern>
<seourl:urlToParamMapping>
<seourl:mapping name="langId" value="?LanguageToken?" />
<seourl:mapping name="storeId" value="?StoreToken?" />
<seourl:mapping name="catalogId" value="?CatalogToken?" />
</seourl:urlToParamMapping>
<seourl:paramToUrlMapping>
<seourl:mapping name="LanguageToken" value="?langId?"
defaultValue="-1" />
<seourl:mapping name="StoreToken" value="?storeId?" />
<seourl:mapping name="CatalogToken" value="?catalogId?" />
<seourl:mapping name="SuggestionComplaintsToken" value="SuggestionComplaintsToken" />
</seourl:paramToUrlMapping>
<seourl:usageDef CMCPrefix="true">
<seourl:usage device="browser">
<seourl:target>SuggestionComplaints</seourl:target>
</seourl:usage>
</seourl:usageDef>
</seourl:seoUrlPatternDef>
</seourl:seoUrlConfiguration>
SQL Executed
insert into seotokenusgtype (tokenusgtype_id, tokenusgtype, primarytoken,storeent_id, isstatic) values ((select counter+1 from KEYS where tablename='seotokenusgtype') , 'SuggestionComplaints', 'SuggestionComplaintsToken',<store-id>, 1);
update KEYS set counter=counter+1 where tablename='seotokenusgtype';
insert into seourl (seourl_id, tokenname, tokenvalue) values ((select counter+1 from KEYS where tablename='seourl'), 'SuggestionComplaintsToken', 'SuggestionComplaintsToken');
insert into seourlkeyword (seourlkeyword_id, seourl_id, storeent_id,language_id, urlkeyword, status) values((select counter+1 from KEYS where tablename='seourlkeyword'), (select seourl_id from seourl where tokenname='SuggestionComplaintsToken'), <store-id>, -1, 'suggestion-complaints', 1);
update KEYS set counter=counter+1 where tablename='seourl';
update KEYS set counter=counter+1 where tablename='seourlkeyword';
Day 5 : 301 Redirections for Search Engine Optimization
301 URL redirection has been included as part
of the SEO solution for WebSphere Commerce Feature Pack 3. If a URL
is changed either by WebSphere Commerce or a business user, a redirect
is automatically generated between the old and new URLs.
URL redirects have been implemented for the following cases:
- When the URL of a catalog entry, catalog group or static page is updated, a redirect is automatically generated between the old and new URLs.
- When an extended site specific URL for a catalog entry or catalog group is created, the asset store URL is duplicated to the extended site and then a redirect is created between the extended site duplicate of the asset store URL and the new URL
- When an extended site specific URL is cleared for a catalog entry or catalog group, a redirect is created between the extended site URL and the asset store URL
In all of the above cases if the URL of a catalog entry or catalog
group is updated multiple times then all previous redirects are updated
to point to the latest URL for that catalog object. In this way redirection
chains are avoided.
Demo Video
Demo Video
URL redirect traffic
Traffic statistics
are recorded for individual redirect mappings. These statistics are
held in the SEOREDIRECTTRAFFIC table.
This
table holds:- The last used date of individual redirect mappings
- The number of times that those redirect mappings are used
While there is no out-of-the-box user interface to view these
statistics, these values are useful:
Performance Consideration
- A custom user interface can be created in order to monitor when search engines, affiliate links, and customer's personal bookmarks are still referring to old URLs for your catalog entries or catalog groups
- For determining when to delete old URLs from the database in order to improve system performance.
Performance Consideration
In order to help with performance, redirect traffic data is not sent to the database on each use of a redirect rule. Instead that data is stored in a cache, and is only flushed to the database once a certain number of redirect usages has occurred. This number is configurable by referring to the redirectHitCountBatchUpdateSize parameter in the SEORuntime section of the wc-admin-component.xml infrastructure configuration file.
Removing unused URLs
Out of the box Scheduler : CleanSEOURLS
The CleanSEOURLS job command is used to clean
up the tables related to search engine optimization (SEO) URL redirects
and SEO URL keywords. An SEO URL redirect rule is deemed obsolete
if the date the rule was last used by an incoming HTTP request has
exceeded 60 days.
This number is configurable by modifying
the infrastructure component configuration file (wc-admin-component.xml).
Once a redirect rule is deemed obsolete the original url keyword that
was used in that rule is also deleted. These are the URL keywords
that are marked as "inactive" when a redirect rule is created.
This command will delete entries from the SEOREDIRECT, SEOREDIRECTTRAFFIC, SEOURLKEYWORD and SEOURL tables.
Day 6 : Title and meta description (TMD) for SEO pages
The title and meta description data is comprised of:
Page title
The page title appears in the customer's browser's title bar For example: Large Adjustable Desk Lamp | Madisons
Meta description
The meta description is used by search engines to provide a description of your site and the current web page's contents for a search results page. It is stored in the web pages HTML and is not viewable on the page itself.
Meta keyword
The meta keyword is used for your store's static pages such as the contact us or help page for search engines to accurately rank and index the web page. It is stored in the web page's HTML and is not viewable on the page itself.
Image alt text
Image alt text describes the contents of an image for search engines to accurately rank and index the image. It is viewable by hovering over the image on the web page and can be used for text to speech systems for the visually impaired.
The TMD is defined as templates in the SEOPAGEDEF and SEOPAGEDEFDESC tables with the help of the SEO substitution parameters.
Other important tables wrt the TMD is SEOPAGEDEFOVR and SEOPAGEDEFSUBPARAM.
Demo Video
In this demo video , we will learn how to define the TMD for the new static "Suggestions and Complaints" page which we have created in the Day 4 : Demo - Creating short SEO URLs for new static views.We will also understand the OOB tables.
Lets start the final legs of our marathon!
Demo Help Content
SQL Queries
insert into seopagedef (seopagedef_id, pagename, storeent_id, lastupdate, createdtime) values ((select max(seopagedef_id)+1 from seopagedef), 'SUGGESTIONS_PAGE', (select storeent_id from storeent where identifier = 'Madisons'), '2012-04-22 00:00:00.00', '2012-04-22 00:00:00.00');
update keys set counter = counter+1 where tablename like 'seopagedef';
insert into seopagedefdesc (seopagedef_id, language_id, title, meta_desc, meta_keyword, image_alt_desc, lastupdate, createdtime) values ((select max(seopagedef_id) from seopagedef), -1, 'Suggestion and Complaints at <seo: StoreName/>', 'Suggestion and Complaints at <seo: StoreName/>', 'Suggestion and Complaints <seo: StoreName/>', 'Image for Suggestion and Complaints at <seo: StoreName/>', '2012-04-22 00:00:00.00', '2012-04-22 00:00:00.00');
select * from seopagedef where storeent_id = (select storeent_id from storeent where identifier = 'Madisons');
select * from seopagedefdesc where SEOPAGEDEF_ID in (select SEOPAGEDEF_ID from seopagedef where storeent_id = (select storeent_id from storeent where identifier = 'Madisons')) and language_id = -1;
select * from SEOPAGEDEFOVR;
JSP Changes
The SuggestionComplaints.jsp used can be downloaded from this link. Place it in the following directory - /Stores/WebContent/Madisons/StoreInfoArea/
Additional Read
Retrieving search engine optimization (SEO) substitution parameters for populating the Management Center UI
Day 7 : Generating Sitemaps to submit to search engine providers
A Sitemap is an xml list of all the pages in your store that is submitted to search engines so that they will know what to crawl and index. The Sitemap Generator has been enhanced in Feature Pack 3 to index the new friendly website addresses and search landing pages.
For
more information on Sitemaps, see WebSphere Commerce integration with sitemaps.
With the WebSphere Commerce integration with sitemaps, you
can create a sitemap XML file, sitemap_ storeID.xml, that
contains a list of URLs for your site. This way, customers are able to easily
find your site when they perform a search, promoting activity to your site,
and increasing the probability of sales.
The sitemap_ storeID.xml file is placed in the following
directory:
WC_eardir /Stores.war
WCDE_installdir /workspace/Stores/WebContent
The OOB command SitemapGenerate can be scheduled at regular intervals to generate the SiteMap XML. Please refer the link Creating and scheduling the SitemapGenerate job for more details on the scheduling.
I Will Provide SEO Blog Comment Service . & niche relevant blog comment service we provide a quality service with 100% Buyer satisfaction and My team Believed in Quality work not Quantity Contact me Now 24/7.check out this Blog for your business . your business will be gain 200% more profit I can not recommend you guys enough.
ReplyDeleteIntegrated Shopping and PLAs, and building a mobile business. local search marketing
ReplyDeleteI wanted to thank you for this excellent read!! I definitely loved every little bit of it. I have you bookmarked your site to check out the new stuff you post. blogger temaları
ReplyDeleteIt seems you are so busy in last month. The detail you shared about your work and it is really impressive that's why i am waiting for your post because i get the new ideas over here and you really write so well.
ReplyDeleteSelenium Training in Chennai Tamil Nadu | Selenium Training Institute in Chennai anna nagar | selenium training in chennai velachery
Selenium Training in Bangalore with placements | Best Selenium Training in Bangalore marathahalli
java training in chennai | java training in chennai Velachery |java training in chennai anna nagar
I appreciate that you produced this wonderful article to help us get more knowledge about this topic. I know, it is not an easy task to write such a big article in one day, I've tried that and I've failed. But, here you are, trying the big task and finishing it off and getting good comments and ratings. That is one hell of a job done!
ReplyDeleteData Science Training in Chennai
Data Science course in anna nagar
Data Science course in chennai
Data science course in Bangalore
Data Science course in marathahalli
Your good knowledge and kindness in playing with all the pieces were very useful. I don’t know what I would have done if I had not encountered such a step like this.
ReplyDeleteMicrosoft azure training in Bangalore
Power bi training in Chennai
Thanks for sharing information about SEO, it was great and seems to be good information.
ReplyDeletetop seo services multan