google search results showing wrong posts


I primarily write blogs on atg topics and some general topics which i think will help others,one fine day i noticed few of my posts are not displaying correctly in google search results,while given a search criteria i am seeing  different posts of mine displaying in the search results whereas my actual post for that search criteria is not shown,due to this some of our new visitors may leave the site.This is a painful situation and we are helpless since google has its own algorithm for displaying and filtering search results,to correct this  we can do some research on what went wrong and modify accordingly which is a permanent solution but time consuming.But most of the time we will leave this to google trusting it will correct this automatically.

Instead you can  try some of the options below,which is not only a workaround but will make your site highly navigational and user friendly

The first thought is how quickly we can redirect users back to actual posts he is looking for,once he click the incorrect posts from google search results?

Option-1 is to add a 'Recent Posts','Popular Posts' and 'Recent Comments' widgets in your blog,so that chances are there user might find the information he is looking for from these widgets which will eventually make him stay at your site.

Option-2 is to add a google search tool bar to your blog,which has options to search the blog posts,search in web etc.This helps the user to quickly search the post and get the required data.

Option-3 is to add a blog archive,user can easily navigate this archive to find the necessary posts/data.One common thing noticed while creating an archive is most of  us make an archive option set to daily archiving which makes navigation difficult for the user.In this case user has to do several clicks inorder to expand the archive and get his necessary information which is not user friendly.Modify the option to monthly if not,so that he can easily navigate your blog archive and find the information he is looking for. 

Adding  a good sitemap and categorizing your posts will also helps and make your site more user friendly.

Alternately you can investigate what went wrong and take the corrective measures.

Feel free to Add if you know other alternatives !!!!

Logging without Extending GenericService

ATG has a built in logging mechanism provided by the class atg.nucleus.GenericService,the logging can be done through the methods logDebug(),logInfo() etc.Most of the frame work/Out Of the Box classes like DynamoServlet,GenericFormHandler,CartModifierFormHandler etc are extending the Generic Service class.

But if you are writing a component class which cannot extend GenericService in its hierarchy,we need to do a small tweak like below.

Create a component from the Out Of Box class 'atg.nuceus.logging.ApplicationLoggingImpl'.

# /com/test/TestLogger
#Thu Jul 12 21:22:19 GMT+05:30 2012
$class=atg.nucleus.logging.ApplicationLoggingImpl
$scope=global
loggingDebug=true

Now create your own component class.Inject the logger into these POJO classes.

package test;
import atg.nucleus.Nucleus;
import atg.nucleus.logging.ApplicationLoggingImpl;

public class Testbean {

private ApplicationLoggingImpl logger;

public ApplicationLoggingImpl getLogger() {

return logger; }

public void setLogger(ApplicationLoggingImpl logger) {

this.logger = logger;

// the identifier will enable the logger to know which component has
// given the log message. otherwise it will tell unknown service as the //component name 

logger.setLoggingIdentifier("/com/test/Testtbean");
....

}

Inject the logger into your Testbean component.

# /com/test/Testbean
#Thu Jul 12 21:22:19 GMT+05:30 2012

$class=test.firstbean
$scope=request
logger=/com/test/TestLogger



Now you can use  logger inside the class in normal fashion.

if(logger.isLoggingDebug())

logger.logDebug("inside XXX method");

Now if we wish to change the log level, we need to go to the ACC or adminUI, and locate the TestLogger component and change its appropriate properties.

See Also

Blog increase space between two widgets

html widgets without spacing








I have modified blog template  from three column to four column by adding one more sidebar.So now i can add more information  and ads to my blog,but unfortunately there is no widget/gadget spacing in the sidebar i added recently and as a result the ads added in these widgets are displaying very close to each other,not in a user friendly manner, like the screen shot above.

I have added a small modifications inside the widget code.its nothing but adding a 'br' tag inside your HTML widget as shown below.Only thing you need to take care is to add this line below your ad code or in a seperate widget altogether and place that widget in between any two widgets.


adding br tag to html widget
















This tag will add two line breaks between the widgets. See the screen shot below.
displaying widgets with increased spacing

Also see

Blogger option to delete images from Picasa Albums

Normally during blogging  you upload lot of images,but have 
you ever noticed where this images are getting stored,its getting stored in the picasa web albums.Similiarly while deleting posts whether will the images are removed automatically ? No ,How can it be removed from the picasa
web albums?

When you delete a post,you will be shown a confirmation  page with the option 'Are you sure want to delete the Post?',then the entire post and below it will display all the images you uploaded with that post,if any , with a checkbox corresponding to each of it.You can select the checkbox to delete the images permanently from the picasa web albums.

Another thing is when people want to remove one blog,they delete the entire blog one shot,but this will not remove the images from the picasa web albums.So if you are sure you dont want the images any more,better options is go to your individual posts and follow the above steps to delete images.I prefer this way than going to picasa and delete the images,because this will make sure you are not deleting any required images and will have more control of your actions.Once you remove all the images from your posts,go and delete your blog.
blog option to delete image in post

Initialize target environment and edit workflow to specify target



Click the Make changes live button on the deployment administration configuration screen.

In the New Site Initialization Options screen, leave Do a full deployment selected and click Make changes live.

To follow the progress of the deployment, click Overview and open the Production site. Once the deployment is done, click back to deployment overview.

Once the initialization process is done, you should see the following in the Deployment Overview screen:



Edit workflows to specify Target

Log on to URL: http:localhost:8180/dyn/admin.

Click on ADMIN ACC and Start ACC in server VM.

In ACC, select Workflow, publishing. Open and modify workflows under Commerce,Content Administration and Personalization folders.

Select Target site in all the places where it is displaying in Red color.

Manually Configure Deployment in CA Server

In BCC Home page click Content Administration - > Admin Console,this will take you to Deployment Administration page.


Click Configuration link in the left column under 'Deployment Administration'.

Set up the Production Environment.

Click on the Add site link and Enter the following information.
Add site information in BCC









Scroll down further to the Setting Repository Mappings area.

Select /atg/commerce/catalog/ProductCatalog as the source repository and /atg/commerce/catalog/ProductCatalog_production
as the destination repository.

It should look like the image below. Click the Add button.

Repository Mapping Section




Repeat the same step above for mapping other repositories 
like ClaimableRepository, PersonalizationRepository, and SecurePriceLists(mapped to PriceLists_production) and yourRepository component.

Click Save changes.

Click on the Agents tab, pictured below.

Click on the Add agent to site link. Enter the following information

Agent name: prod

Transport URL: rmi://localhost:8160/atg/epub/AgentTransport

Include file systems: /atg/epub/file/ConfigFileSystem

Note: To determine the correct RMI port, you can refer to that ATG server’s /atg/dynamo/Configuration.properties file.

Click Save changes when you are done.

Click the back to deployment administration configuration link.


Agent details in BCC


Deployment topology xml file

Deployment topology can be defined in 2 ways: manually creating using BCC or using the deploymentTopology.xml. 

Deployment topology file can be located in the path - <atgxxxdir>/Publishing/base/src/config/atg/epub/deploymentTopology.xml

As described earlier, the structure of the deployment topology contains the target sites, Publishing agents and source – destination repository mapping.

Please find below the reference for deployment topology file for a staging and production instance.

<? Xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE publishing-deployment-topology SYSTEM
"http://www.atg.com/dtds/publishing_deployment/publishing_deployment_1.0.dtd">

<publishing-deployment-topology>
<target> <target-name> Production </target-name>
<description> Production , full deployment </description>
<target-deploy-type> WORKFLOW </target-deploy-type>
<agent> <agent-name> PublishProdAgent </agent-name>
<principal-asset> REPOSITORY</principal-asset>
<transport> <transport-type> RMI </transport-type>
<rmi-uri> 
rmi://localhost:port1/atg/epub/AgentTransport</rmi-uri>
</transport>
</agent>
<repository-mapping><source- 
repository>/atg/commerce/catalog/ProductCatalog </source- 
repository>
<destination- 
repository>/atg/commerce/catalog/ProductCatalog_production 
</destination-repository>
</repository-mapping>
<repository-mapping><source-
repository>/atg/commerce/priceLists/PriceLists </source-
repository>
<destination-repository atg/commerce/priceLists/PriceLists 
_production </destination-repository>
</repository-mapping> </target>
<target> <target-name> Staging </target-name>
<description> Staging, full deployment </description>
<target-deploy-type> WORKFLOW </target-deploy-type>
<agent> <agent-name> Publish StagAgent </agent-name>
<principal-asset> REPOSITORY</principal-asset>
<transport> <transport-type> RMI </transport-type>
<rmi-uri> 
rmi://localhost:port2/atg/epub/AgentTransport</rmi-uri>
</transport>
</agent>
<repository-mapping><source- 
repository>/atg/commerce/catalog/ProductCatalog </source-
repository>
<destination-
repository>/atg/commerce/catalog/ProductCatalog_staging 
</destination-repository>
</repository-mapping>
<repository-mapping><source-
repository>/atg/commerce/priceLists/PriceLists </source-
repository>
<destination-repository atg/commerce/priceLists/PriceLists 
_staging </destination-repository>
</repository-mapping> </target>
</publishing-deployment-topology>

Once the file is ready go to the Deployment 
Administration page,click configuration and choose
the option click Import from XML.See Screen shot below


See also how to manually configure deployment in the CA Server.


import from xml option in bcc

Nested Servlet Beans and Referencing Parameters

Because a servlet bean's parameters have scope only within the bean itself, when you nest one servlet bean inside another, the outer servlet bean is not affected by the parameter values in the inner servlet bean. However, it is possible for the inner bean to access the values of the outer bean's parameters by prepending two dots (..) to the parameter names to distinguish them from the inner bean's parameters of the same name.


Suppose, in the previous example, you wanted to display both the product's name and corresponding skus from the inner ForEach. You could do something like this:

<droplet bean="/atg/dynamo/droplet/ForEach">
  <param name="array" VALUE="/myBean.products">
    <oparam name="output">   
       <droplet bean="/atg/dynamo/droplet/ForEach">
       <param name="array" VALUE="param:element.skus">
       <oparam name="output">
        <p> <valueof param="..element.name"></valueof>   
         has the  SKUs
         <valueof param ="element"></valueof>.    
       </oparam>
       </droplet>
    </oparam>
</droplet>

In the first VALUEOF tag, ..element refers to the element parameter of the outer ForEach. In the second VALUEOF tag, element refers to the element parameter of the inner ForEach. The resulting HTML is:

<p>Samsung Galaxy  has the SKUS Samsung Galaxy B7510 .
<p>Samsung Galaxy  has the SKUS Samsung Galaxy pop s5570
<p>Samsung Galaxy  has the SKUS Samsung Galaxy pop i559


<p>Nokia has the SKUS Nokia Lumia 800 
<p>Nokia has the SKUS Nokia X2 
<p>Nokia has the SKUS Nokia C5 

You can use this dot notation with multiple levels of nesting. 
Parameters preceded by two dots refer to the servlet bean one level up; parameters preceded by three dots refer to the servlet bean two levels up; and so on. You can also use a single dot to refer to a parameter at the current level, but this is not necessary.

Another approach is to use the setvalue tag to define another parameter in the outer servlet bean, and set it to the value of the parameter you want to refer to from within the inner servlet bean. The following example uses this approach, and produces that same results as the example above.See the screen shot below.


Referencing parameter in nested servlet bean





Related Posts Plugin for WordPress, Blogger...