Thursday, July 2, 2009

[Gd] Announcing UX improvements in the sandbox

| More

iGoogle Developer Blog: Announcing UX improvements in the sandbox

Over the last few days, we've introduced several improvements to the sandbox to help flesh out what the full social experience will look like for your users.

First, sharing a gadget is a richer experience — requestShareApp invites now display notifications at the top of the invitee's iGoogle page and in the "gadget shares" link on the left nav bar. This system smoothly handles all the different use cases for you. If you invite a friend who does not yet use iGoogle, they will receive an email inviting them to join iGoogle and to share the gadget with you. Then, if your friend creates an account they will be prompted to add you as a friend. If your friend already has iGoogle but does not have you listed as a friend and/or does not have the gadget, they will see one of the new social notifications prompting them to add the gadget and/or to add you as a friend, respectively. Finally if the friend you invited already has you as a friend and the gadget, they'll get a dismissable message saying that you have invited them. As a developer you won't have to worry at all about whether or not someone uses iGoogle, has the gadget, or is friends with the user — requestShareApp will handle that all transparently for you!

Next, you can delete the "Sandbox Friends" gadget, because our real control for editing and expanding your friends list is here, living in the "Friends" link on the left hand nav bar. This, in addition to the prompts described above, is how users will add friends to their accounts.

And finally, the Updates gadget continues to improve — multimedia Updates should be displaying much more cleanly now, and you can also filter Updates for those posted by your own gadgets. Remember that the final version of Updates, like the friends control and social notifications will live on the left nav bar, and gadgets will be limited to three Updates per user per day.

Posted by Dan Holevoet, Developer Programs
URL: http://igoogledeveloper.blogspot.com/2009/07/announcing-ux-improvements-in-sandbox.html

[Gd] Gmail for Mobile HTML5 Series: Using Timers Effectively

| More

Google Code Blog: Gmail for Mobile HTML5 Series: Using Timers Effectively

On April 7th, Google launched a new version of Gmail for mobile for iPhone and Android-powered devices. We shared the behind-the-scenes story through this blog and decided to share more of what we've learned in a brief series of follow-up blog posts. This week, I'll talk about two kinds of timers Javascript provides and how you can put them to good use in your own web applications.

Javascript Timer API

Timers provide a way to schedule a function to run at some later point in time. The two functions used to create timers are:
  • var id = setTimeout(fn, delay) creates a timer which calls the specified function once after the given delay.
  • var id = setInterval(fn, delay) is similar, but the function is called continually until the timer is canceled.
Each type of timer has a corresponding clear method (e.g., clearTimeout(id)) that stops a timer while it is running.

There are many great resources online already that document the nitty-gritty details of this API. That's not our focus here. Instead, I want to talk about specific ways in which you can put these timers to work for you in your web application.

Let's Do the Time Warp Again

It's important to keep in mind that just because you ask for a timer with a certain delay doesn't mean it will fire precisely that many milliseconds later. On current browsers, all Javascript code executes within a single thread. This means all your timers have to contend for execution time not only with each other, but also with all the other Javascript code in your application. If another block of code is in the middle of executing when a timer should fire, the timer will be delayed until that block of code is done. (Help is on the way: HTML5's Web Workers will allow web applications to spawn workers that run scripts in parallel.)

Let's look at a concrete example of what this means in practice. I added a timer to Gmail for mobile that is supposed to fire every 200 ms. Each time it fires, it records the time between consecutive timer ticks. Here are the results after 100 ticks:


The dashed blue line represents the requested timer interval, 200 ms. Notice that the median was almost 50% higher than requested, at 276 ms; the time between ticks varied from 98 ms to almost 4 seconds, with an average delay of 493 ms.

This highlights the fact that the interval at which your timer actually fires may differ greatly from the requested delay. In fact, the time between ticks is typically highly variable. It will fluctuate based on what else is happening in your application and on the device. Don't rely on yours timer being precise!

Buy One Timer, Get One Free?

When I first started working on the new version of Gmail for mobile, the application used only a couple of timers. As we continued adding more and more features, the number of timers grew. We were curious about the performance implications: would 10 concurrent timers make the app feel slow? How about 100? How would the performance of many low-frequency timers compare to a single high-frequency timer?

To answer these questions, we conducted a few experiments. We injected some extra code into a development build of Gmail that created a lot of different timers, each of which just performed some simple calculations. Then we fired up the app on an iPhone 3G and Android G1 (both running the latest version of their respective firmware) and observed the performance. Note that although we could have just created a separate test page for this, we chose to inject the code right into our app so we could see how fast it would be to read and process mail with all those timers running.

Here's what we learned. With low-frequency timers — timers with a delay of one second or more — we could create many timers without significantly degrading performance on either device. Even with 100 timers scheduled, our app was not noticeably less responsive. With high-frequency timers, however, the story was exactly the opposite. A few timers firing every 100-200 ms was sufficient to make our UI feel sluggish.

This led us to take a mixed approach with the timers we use in our application. For timers that have a reasonably long delay, we just freely create new timers wherever they are needed. However, for timers that need to execute many times each second, we consolidate all of the work into a single global high-frequency timer.

One High-Frequency Timer to Rule Them All

A global high-frequency timer strikes a balance between needing several different functions to execute frequently and application performance. The idea is simple: create a single timer in a central class that calls as many functions as required. Ours looks something like this:


var highFrequencyTimerId_ = window.setInterval(globalTimerCallback, 100);

globalTimerCallback = function() {
navigationManager.checkHash();
spinnerManager.spin();
detectWakeFromSleep_();
};

Why did we choose to hardcode the various function calls in onTick_() rather than implementing a more generic callback registration interface? Keep in mind that this code is going to execute many times every second. Looping over an array of registered callbacks might be slightly "cleaner" code, but it's critical that this function execute as quickly as possible. Hardcoding the function calls also makes it really easy to keep track of all the work that is being done within the timer.

To Die, To Sleep; To Sleep, Perchance to Tick

One neat application of a high-frequency timer is to detect when the device has been woken from sleep. When your application is put to sleep — either because the device is put into sleep mode or because the user has navigated away from the browser to another application — time, as perceived by your app, pauses. No timers fire until the user navigates back to your app and it wakes up. By keeping a close eye on the actual time that elapses between high-frequency timer ticks, you can detect when the app wakes from sleep.

First, create a high-frequency timer, as described above. In your timer, call a function that keeps track of the time between ticks:


// The time, in ms, that must be "missed" before we
// assume the app was put to sleep.
var THRESHOLD = 10000;

var lastTick_;
detectWakeFromSleep_ = function() {
var now = new Date().getTime();
var delta = now - this.lastTick_;
if (delta > THRESHOLD) {
// The app probably just woke up after being asleep.
fetchUpdatedData();
}
lastTick_ = now;
};

Now your users will always have the latest data available when they return to your app without having to manually perform a refresh!

I hope this helps you make the most of timers in your web application. Stay tuned for the next post, where we'll discuss some cool tricks to spice up the text areas on your forms.

By Neil Thomas, Software Engineering Intern, Google Mobile
URL: http://googlecode.blogspot.com/2009/07/gmail-for-mobile-html5-series-using.html

[Gd] Apache Shindig 1.0-incubating released

| More

OpenSocial API Blog: Apache Shindig 1.0-incubating released

Apache Shindig aims to make it simple to create your own OpenSocial container by providing an open source implementation (in both Java and PHP) of the OpenSocial APIs. The Shindig team recently made creating and maintaining an OpenSocial container even easier, by publishing a release that supports OpenSocial v0.8.1.

Now, instead of checking out a specific revision or trying to keep up with the ever-changing trunk, OpenSocial container developers can use stable releases in their own websites. As issues come up, the Shindig community will fix them and roll them into the stable release, so developers will just need to grab the new version.

The Apache Shindig 1.0-incubating release is available on the downloads page of the Shindig website. If you've been running an older revision or branch, now's the time to update to known-good state. Of course, the Shindig folks have been busy, so if you're interested in new features, like templates and the streamlined JavaScript API, you can get all the OpenSocial v0.9 features by checking out the source -- and a stable release supporting OpenSocial v0.9 is already in the works!


Posted by Lane LiaBraaten, on behalf of the Apache Shindig Team
URL: http://blog.opensocial.org/2009/07/apache-shindig-10-incubating-released.html

[Gd] Stem the 401 Tide

| More

iGoogle Developer Blog: Stem the 401 Tide

Some of you may have noticed that OpenSocial API calls in the sandbox have started returning 401s, regardless of whether or not you've enabled social ACLs in your gadget. We're in the process of changing a few things behind the scenes, one of which has the unfortunate side effect of breaking the ACL check. While this is straightened out, make sure to visit: http://www.google.com/ig?force_sandbox=1 for a squeaky-clean and error-free sandbox.

Posted by Dan Holevoet, Developer Programs
URL: http://igoogledeveloper.blogspot.com/2009/07/stem-401-tide.html

[Gd] Stem the 401 Tide

| More

iGoogle Developer Blog: Stem the 401 Tide

Some of you may have noticed that OpenSocial API calls in the sandbox have started returning 401s, regardless of whether or not you've enabled social ACLs in your gadget. We're in the process of changing a few things behind the scenes, one of which has the unfortunate side effect of breaking the ACL check. While this is straightened out, make sure to visit: http://www.google.com/ig?force_sandbox=1 for a squeaky-clean and error-free sandbox.

Posted by Dan Holevoet, Developer Programs
URL: http://igoogledeveloper.blogspot.com/2009/07/stem-401-tide.html

[Gd] Stem the 401 Tide

| More

iGoogle Developer Blog: Stem the 401 Tide

Some of you may have noticed that OpenSocial API calls in the sandbox have started returning 401s, regardless of whether or not you've enabled social ACLs in your gadget. We're in the process of changing a few things behind the scenes, one of which has the unfortunate side effect of breaking the ACL check. While this is straightened out, make sure to visit: http://www.google.com/ig?force_sandbox=1 for a squeaky-clean and error-free sandbox.

Posted by Dan Holevoet, Developer Programs
URL: http://igoogledeveloper.blogspot.com/2009/07/stem-401-tide.html

[Gd] Stem the 401 Tide

| More

iGoogle Developer Blog: Stem the 401 Tide

Some of you may have noticed that OpenSocial API calls in the sandbox have started returning 401s, regardless of whether or not you've enabled social ACLs in your gadget. We're in the process of changing a few things behind the scenes, one of which has the unfortunate side effect of breaking the ACL check. While this is straightened out, make sure to visit: http://www.google.com/ig?force_sandbox=1 for a squeaky-clean and error-free sandbox.

Posted by Dan Holevoet, Developer Programs
URL: http://igoogledeveloper.blogspot.com/2009/07/stem-401-tide.html

[Gd] Stem the 401 Tide

| More

iGoogle Developer Blog: Stem the 401 Tide

Some of you may have noticed that OpenSocial API calls in the sandbox have started returning 401s, regardless of whether or not you've enabled social ACLs in your gadget. We're in the process of changing a few things behind the scenes, one of which has the unfortunate side effect of breaking the ACL check. While this is straightened out, make sure to visit: http://www.google.com/ig?force_sandbox=1 for a squeaky-clean and error-free sandbox.

Posted by Dan Holevoet, Developer Programs
URL: http://igoogledeveloper.blogspot.com/2009/07/stem-401-tide.html

[Gd] Stem the 401 Tide

| More

iGoogle Developer Blog: Stem the 401 Tide

Some of you may have noticed that OpenSocial API calls in the sandbox have started returning 401s, regardless of whether or not you've enabled social ACLs in your gadget. We're in the process of changing a few things behind the scenes, one of which has the unfortunate side effect of breaking the ACL check. While this is straightened out, make sure to visit: http://www.google.com/ig?force_sandbox=1 for a squeaky-clean and error-free sandbox.

Posted by Dan Holevoet, Developer Programs
URL: http://igoogledeveloper.blogspot.com/2009/07/stem-401-tide.html

Wednesday, July 1, 2009

[Gd] Enabling Public Service: All for Good and Google App Engine

| More

Google Code Blog: Enabling Public Service: All for Good and Google App Engine



You may have seen the post on the Google Blog about All for Good, the new site that makes it easy to find and share volunteer activities within the United States. The site was built collaboratively by Google and several partners. We're especially proud that it was built using 100% open source Python code. All for Good's first release includes both gadgets and a free API, making it even easier for casual developers to build applications and embed All for Good listings in their own apps and sites.

If you're interested in seeing your software talents dedicated to community service, check out the API documentation, our Getting Started Guide and the complete source code for the core engine. We're especially looking forward to see what applications the developer community will create for mobile platforms and for Facebook. Happy Hacking!

by Guido van Rossum, Software Engineering Team
URL: http://googlecode.blogspot.com/2009/07/enabling-public-service-all-for-good.html

[Gd] Follow us on @GoogleCode

| More

Google Code Blog: Follow us on @GoogleCode

Google Code now has a home on Twitter - introducing @GoogleCode! Expect our tweets to be a nice mix of developer product announcements, Code Blog coverage, coding tips and tricks, interesting tech news and commentary, developer events, and more.

If you have any suggestions for what you want to see, feel free to send an @reply. We can't guarantee to respond to everyone, but we'd like to hear your feedback and suggestions for @GoogleCode or our developer products.

By Christine Tsai, Google Developer Programs
URL: http://googlecode.blogspot.com/2009/07/follow-us-on-googlecode.html

Tuesday, June 30, 2009

[Gd] Webmaster Central YouTube update for June 22nd - 26th

| More

Official Google Webmaster Central Blog: Webmaster Central YouTube update for June 22nd - 26th

Want to know what's new on the Webmaster Central YouTube channel? Here's what we've uploaded in the past week:

As part of Google's goal to make the web faster, we uploaded several video tips about optimizing the speed of your website. Check out the tutorials page to view the tutorials and associated videos.

Matt Cutts answered a new question each day from the Grab Bag:
And during Adam Lasnik's visit to India, he was interviewed by Webmaster Help Forum guide Jayan Tharayil about issues related to webmasters in India. We have the full three-part interview right here.

We'll get you started on this batch of videos with Matt's tips for targeting your site to a specific region:


Feel free to leave comments letting us know how you liked the videos, and if you have any specific questions, ask the experts in the Webmaster Help Forum.

Posted by Michael Wyszomierski, Search Quality Team
URL: http://googlewebmastercentral.blogspot.com/2009/06/webmaster-central-youtube-update-for_30.html

[Gd] AdWords API v2009 Launch

| More

AdWords API Blog: AdWords API v2009 Launch

Hello all,


The AdWords API team is pleased to announce the launch of AdWords API v2009 in production! v2009 offers more speed, scale, and flexibility to developers, at a lower cost.


Back in April, we released a sandbox for our newest version of the AdWords API so you could begin experimenting. As mentioned in that blog post, we're using a new version naming convention to highlight the significant differences between this version, called AdWords API v2009, and v13.


This launch is a production beta, and we're asking developers to sign up for access here. We'll add you to our whitelist on a rolling basis,and send each of you a confirmation email once you've been added.


We've made a few policy changes in the API v2009 as well:


  • Revised Terms and Conditions - We've updated our Terms and Conditions to improve clarity. This change includes a more comprehensive explanation of our policy regarding the commingling of data, and also redefines the required minimum AdWords functionality for third party developers. You can see the list of required and optional features here.
  • Lower costs - v2009 comes with a new Rate Sheet that reflects the improved efficiency of the new system. We've lowered the cost of v2009 for the average developer by approximately 20% through reducing the unit cost of our most commonly called operations -- add criteria, add add, and set adgroup.

Getting started with v2009:

Once you've applied for access, you can find comprehensive developer documentation on our v2009 homepage.


While you're waiting for access to the v2009 beta, we encourage you to begin experimenting immediately with the v2009 sandbox. The sandbox doesn't charge for quota, and all you need to access it is your current Google account username and password. Please remember that the sandbox is a testing and development environment, so changes made there won't affect your live AdWords account. You can read more about sandbox best practices here.


What to expect next:

Over the next few months, we'll continue to introduce new features and additional AdWords functionality. Prior to moving added features to production, they'll be released to the v2009 sandbox so that you can try them out in advance. As they become available, we'll announce them on our blog. Some of the most notable are:


  • Partial failure acceptance - We plan to support partial failures, which means that large posts won't be completely rolled back due to a few small errors. This allows you to keep moving forward with development without halting to re-do posts.
  • Asynchronous calls - We’ll offer asynchronous calls, which will allow you to work with large sets of data faster and more easily. Instead of having to wait for our system to fully complete your request before you can make another one, you’ll be able to make another call as soon as the API service confirms that it’s received your previous call. No more waiting for large requests to be finished. (Synchronous methods will still be supported as well.)
  • Keyword Tools - With new keyword management tools, you'll be able to directly access new URL-specific keyword suggestions from the AdWords Keyword Tool and the Search-based Keyword Tool through the API.
  • MCC and Reporting functionality.


While we continue to roll out these offerings, both AdWords API v13 and v2009 will be fully supported. We'll begin the sunset countdown for v13 once we remove the v2009 whitelist and all developer have acquired access. Because we're introducing more changes than usual with this version, we'll extend the normal sunset period for v13, so it won't sunset until early 2010. By signing up for the v2009 whitelist now, you have the opportunity to get a head start on development.


Best,


Doug Raymond

Product Manager, AdWords API

URL: http://adwordsapi.blogspot.com/2009/06/adwords-api-v2009-launch.html

Monday, June 29, 2009

[Gd] O3D update: New capabilities and expanded compatibility

| More

Google Code Blog: O3D update: New capabilities and expanded compatibility

We're happy to announce that today we shipped a substantial update to O3D, an API for creating rich 3D applications in a web browser. With today's release, we focused on addressing a theme we heard in the requests and feedback from the community: that O3D should run as well as possible on many different types of hardware. Toward that end, we're releasing two new additions: software rendering and feature requirements. If you've already installed the O3D plugin, you should receive these additions automatically.

Software rendering allows O3D to use the main processor to render 3D images if the machine running the app doesn't have supported graphics hardware. While the hardware O3D requires to run in hardware-accelerated mode is fairly modest by today's standards (a DirectX 9, Pixel Shader 2.0 capable graphics card), there are nonetheless PCs that don't meet these requirements, and we think it's important for web apps to run on all machines, regardless of hardware.

Because software rendering is significantly slower than hardware-accelerated rendering, we're also introducing a concept called "feature requirements" that will help minimize how often O3D will have to fall back to software rendering. Feature requirements allow developers to state upfront that their app will require certain hardware capabilities to render properly. If the machine running the app supports those features, O3D will run it fully hardware accelerated; if however, it is lacking any of the required capabilities, O3D will drop into a software rendered mode. Anecdotally, we found that this tiering allows 45 of our 48 samples to now run in hardware-accelerated mode with less capable graphics cards.

Finally, while it has nothing to do with extending hardware support, we're also adding a couple other goodies: a full-screen mode to make O3D apps more absorbing and a community gallery to feature cool demos that use O3D (like Infinite Journey, the first game developed outside Google using O3D). If you've developed an application or sample that would be useful to the O3D community, please be sure to submit it for our team to review for inclusion in the gallery using this form.

By Henry Bridge, Product Manager
URL: http://googlecode.blogspot.com/2009/06/o3d-update-new-capabilities-and.html

[Gd] Launching Sputnik into Orbit

| More

Chromium Blog: Launching Sputnik into Orbit

Today we're releasing the Sputnik JavaScript test suite. Sputnik is a comprehensive set of more than 5000 tests that touch all aspects of the JavaScript language as defined in the ECMA-262 standard.

Soon after the V8 project started we also began work on what would become the Sputnik tests. The goal was to create a test suite based directly on the language spec that checked the behavior of every object, function and individual algorithm in the language. The task was given to a team in Russia – hence the name "Sputnik" – which went about systematically producing tests. As the test suite grew we used it to ensure that V8 conformed to the spec and to detect unexpected changes in our behavior.

Now that the test suite is complete we're happy to be able to release it as an open source project, under the BSD license. We hope Sputnik can be as useful to other implementers of JavaScript as it has been to us, particularly at a time where implementations change rapidly.

The goal is not that all implementations should pass all tests. V8 set out with that intention and we learned the hard way that sometimes you have to be incompatible with the spec to be compatible with the web. Rather, we want Sputnik to be a tool for identifying differences between implementations.

One of the biggest challenges for web developers today is the many incompatibilities between browsers. Finding these differences is the first step towards removing them. In an ideal world web developers would not have to worry about which browser is being used to view their site and users would not have to worry about whether a site supported their browser. We hope the Sputnik tests will make the browser community take another step towards making that a reality.

Posted by Christian Plesner Hansen, Software Engineer
URL: http://blog.chromium.org/2009/06/launching-sputnik-into-orbit.html

[Gd] Advanced Custom Search Configuration

| More

Google Custom Search: Advanced Custom Search Configuration

Posted by: Rajat Mukherjee, Group Product Manager


Here's the presentation on Advanced Custom Search Configuration from Google I/O. You can navigate it with the help of a convenient timeline at YouTube, or download the presentation in PDF format. The talk features Nick Weininger from the Custom Search team on how to create a contextual search experience in minutes, along with details of the Custom Search APIs, including:In addition, Mark Nichoson from Adobe talked about Adobe Community Help, a customized search application that's available within apps in Adobe's Creative Suite 4. Joel Brandt from Adobe followed up with a description of Blueprint, an innovative application that integrates Custom Search into the Flex development environment.

For more information, please check out the Custom Search developer guide.
URL: http://googlecustomsearch.blogspot.com/2009/06/advanced-custom-search-configuration.html

[Gd] A new addition to the OpenSocial family - the ActionScript3 client library!

| More

OpenSocial API Blog: A new addition to the OpenSocial family - the ActionScript3 client library!

The current generation of social applications has become increasingly interesting and attractive, with many apps sporting fancy animation effects and complex user interactions. One exciting result of this trend is the growing number of ActionScript developers in the community.

To support the development of OpenSocial apps using ActionScript, we are happy to introduce a new client library which exposes almost all of the OpenSocial v0.8 JavaScript APIs in native ActionScript 3 for Flash and Flex gadget developers. The library provides an event-driven development model that is prevalent in the ActionScript community, a FlexUnit-based testing framework, and samples for both Flash and Flex environments. We hope the library will ease the learning curve for ActionScript developers and shorten the development cycle. To check out the code, point your browsers to the Source tab linked from the ActionScript Client Library project page.

This library is completely open sourced under the Apache 2.0 license, and contributions are not only welcomed, but encouraged. In addition to a wiki page explaining the patch submission process, this project hosts an issue tracker which will be populated with known issues and requested enhancements. This tracker is the best place to start if you're interested in contributing to the project. Please use the tracker to report any new bugs or incompatibilities you find, or to request new features. You can also 'star' feature requests reported by other developers if they are significant to your own development. This will help us prioritize which bugs or features to work on next. Also, you are welcome to join the client library discussion forum and post your questions and feedback. We look forward to seeing you there!

Posted by Jacky Wang, OpenSocial Team
URL: http://blog.opensocial.org/2009/06/new-addition-to-opensocial-family.html

[Gd] Traffic drops and site architecture issues

| More

Official Google Webmaster Central Blog: Traffic drops and site architecture issues

Webmaster Level: Intermediate.

We hear lots of questions about site architecture issues and traffic drops, so it was a pleasure to talk about it in greater detail at SMX London and I'd like to highlight some key concepts from my presentation here. First off, let's gain a better understanding of drops in traffic, and then we'll take a look at site design and architecture issues.

Understanding drops in traffic

As you know, fluctuations in search results happen all the time; the web is constantly evolving and so is our index. Improvements in our ability to understand our users' interests and queries also often lead to differences in how our algorithms select and rank pages. We realize, however, that such changes might be confusing and sometimes foster misconceptions, so we'd like to address a couple of these myths head-on.

Myth number 1: Duplicate content causes drops in traffic!
Webmasters often wonder if the duplicates on their site can have a negative effect on their site's traffic. As mentioned in our guidelines, unless this duplication is intended to manipulate Google and/or users, the duplication is not a violation of our Webmaster Guidelines. The second part of my presentation illustrates in greater detail how to deal with duplicate content using canonicalization.

Myth number 2: Affiliate programs cause drops in traffic!
Original and compelling content is crucial for a good user experience. If your website participates in affiliate programs, it's essential to consider whether the same content is available in many other places on the web. Affiliate sites with little or no original and compelling content are not likely to rank well in Google search results, but including affiliate links within the context of original and compelling content isn't in itself the sort of thing that leads to traffic drops.

Having reviewed a few of the most common concerns, I'd like to highlight two important sections of the presentation. The first illustrates how malicious attacks -- such as an injection of hidden text and links -- might cause your site to be removed from Google's search results. On a happier note, it also covers how you can use the Google cache and Webmaster Tools to identify this issue. On a related note, if we've found a violation of the Webmaster Guidelines such as the use of hidden text or the presence of malware on your site, you will typically find a note regarding this in your Webmaster Tools Message center.
You may also find your site's traffic decreased if your users are being redirected to another site...for example, due to a hacker-applied server- or page-level redirection triggered by referrals from search engines. A similar scenario -- but with different results -- is the case in which a hacker has instituted a redirection for crawlers only. While this will cause no immediate drop in traffic since users and their visits are not affected, it might lead to a decrease in pages indexed over time.





Site design and architecture issues
Now that we've seen how malicious changes might affect your site and its traffic, let's examine some design and architecture issues. Specifically, you want to ensure that your site is able to be both effectively crawled and indexed, which is the prerequisite to being shown in our search results. What should you consider?

  • First off, check that your robots.txt file has the correct status code and is not returning an error.
  • Keep in mind some best practices when moving to a new site and the new "Change of address" feature recently added to Webmaster Tools.
  • Review the settings of the robots.txt file to make sure no pages -- particularly those rewritten and/or dynamic -- are blocked inappropriately.
  • Finally, make good use of the rel="canonical" attribute to reduce the indexing of duplicate content on your domain. The example in the presentation shows how using this attribute helps Google understand that a duplicate can be clustered with the canonical and that the original, or canonical, page should be indexed.



In conclusion, remember that fluctuations in search results are normal but there are steps that you can take to avoid malicious attacks or design and architecture issues that might cause your site to disappear or fluctuate unpredictably in search results. Start by learning more about attacks by hackers and spammers, make sure everything is running properly at crawling and indexing level by double-checking the HTML suggestions in Webmaster Tools, and finally, test your robots.txt file in case you are accidentally blocking Googlebot. And don't forget about those "robots.txt unreachable" errors!

Written by Luisella Mazza, Search Quality Senior Analyst
URL: http://googlewebmastercentral.blogspot.com/2009/06/traffic-drops-and-site-architecture_29.html