33 comments

[ 2.7 ms ] story [ 87.0 ms ] thread
I would have expected better from google.
You're unintentionally hilarious. You know nothing about Google's technological challenges nor the decisions behind the various circumstances where they chose to ignore the standard.

I guarantee you that there are thousands of people working at Google who are:

1. Smarter than you

2. Know more about web standards than you

Seriously, get the hell out of here.

Gee, with so many brilliant people working there, I would have expected better from Google.
(comment deleted)
Google might have their reasons to ignore the standards—but I very much doubt of their validity. E.g. all those bgcolor=#ffffff text=#000000 link=#0000cc vlink=#551a8b alink=#ff0000 attributes onbody element. You may claim that these are intended to support the older browsers which have no CSS support. Well, dissable CSS and take a look at google.com to see how much water does this argument hold.

And even if there are valid reasons for invalid markup, there is no reason to have DOCTYPE of the actuall standard if you are not going to follow it.

> And even if there are valid reasons for invalid markup, there is no reason to have DOCTYPE of the actuall standard if you are not going to follow it.

Sure there is. They want browsers to render the page with the latest standards support, even if they have a few trivial violations of that standard.

So sad to see you upvoted, it just shows how little people do know about how HTML, browsers and doctypes interact.

Browsers don't look at doctype and then choose what to support and what not: they will always try their best. See for yourself: http://kod.as/lab/html5/html32.html —that's HTML5 code with <canvas> but with HTML3.2 doctype. Try it in modern browser, canvas still works.

Let me repeat: browsers will always try to render all they can on the page, no matter if that feature was or not in the version of HTML page claims to be. The only thing doctype affects is rendering mode. Any unknown doctype will trigger browsers to render the page in standards compliant mode. This feature is the reason why HTML5 has a doctype declaration at all. If you use XHTML5 (i.e. use xml markup and server your document with MIME application/xml+xhtml) you can omit doctype, because MIME type then tells browser which rendering mode to use.

strong, b, i, and small tags had their semantic meanings changed in HTML5. Thus, a HTML5 doctype gives some information to browsers and search engines on how those tags should be interpreted.
So, will you elaborate, how browsers will act differently upon encountering b, i and small?
Screen readers may treat small as optional text, as it's intended as the inline equivalent of the aside block-level tag. b and i are likely going to wind up having ramifications for how screen reading browsers apply emphasis, as they now have semantic instead of presentational meaning.
Google's pages don't validate. Nobody's claiming there isn't a reason for it. Naturally, one would expect Google to adhere to the standards. As you point out yourself, they're smart enough to understand them. This is old news. Why is it relevant today? Because Google just released mod_pagespeed (http://news.ycombinator.com/item?id=1865249), an Apache module that speeds up pages by rewriting them, using filters based on optimizations developed by Google over the years. If you're a web developer that works under the requirement that all pages are valid HTML, it's important to consider the source before jumping on the mod_pagespeed bandwagon.
(comment deleted)
Please do not attack other users personally like this.
Rewrote a reply in response to your feedback.
Google deals with a scale few understand, you should hesitate to criticize unless you've worked on similar problems.
I read somewhere that they would rather have the page load as fast as possible on all kinds of browsers rather then have a standards compliant slow loading page.
Google is well aware and proud of that fact. They cut their bandwidth in half by not validating.

I was playing with jQuery in the dev console in Chrome yesterday on the Google homepage and realized that I was writing valid jQuery, but that $("body") simply didn't exist.

  They cut their bandwidth in half by not validating.
Care to elaborate on this bullshit about cutting bandwidth in half? I just want to remind you that quoting attributes and leaving out some tags is perfectly valid in HTML5 and HTML4.01. Even in strict.

Converting their markup to the valid one would not be difficult, and they could even save some bandwidth. For example: drop those stupid attributes for body tag. drop <html><head> - these tags are optional. Why do you waste precious bandwidth with <meta http-equiv="content-type" content="text/html; charset=UTF-8">? Your DOCTYPE claims that page is marked up in HTML5 so use it: <meta charset=UTF-8>. Drop thet method=GET from your form: it's default. Alias your document.getElementById: you repeat it 7 times what a waste. Etc., etc.

I have to imagine that Google.com is the most bandwidth optimized page EVER.

Big picture, the W3C spec is not what matters here. What matters is making the same HTML document render exactly across different browsers. So maybe they could drop <html><head> according to W3C, but does that break the document in other browsers?

My guess is that Google doesn't care about the W3C spec in this specific regard. What matters is delivering the smallest document possible that can be rendered by as many browsers as possible.

*Grammar edit.

  I have to imagine that Google.com is the most bandwidth
  optimized page EVER.
Sure it is not, because I can see how it can be optimized even more — and that's just at a glance.

  So maybe they could drop <html><head> according to W3C, but does that
  break the document in other browsers?
No it doesn't.

  My guess is that Google doesn't care about the W3C spec in this specific
  regard.
Ok, it is their call. Anyone is allowed not to care, but why put doctype of existing standard then. Just put <!DOCTYPE foobar> or <!DOCTYPE idontcare> and be done with that.
Okay, not half. But cutting down on bandwidth is their own self proclaimed reason for failing so hard at validation.
Is my memory failing me or was there indeed the time when google.com had no DOCTYPE? That makes perfect sense if you are not going to adhere to any standards. I suppose the reason they have a doctype now is to force browsers into standards compliant rendering mode (it would be quirks otherwise). What baffles me why did they choose HTML5 doctype if they don't care about actually adhering to the spec. They can go with <!DOCTYPE google> and it will work just fine (any unknown doctype triggers standards compliant mode in browsers) without false claim of being compliant with some actual standard.
Virtually all of those are "use CSS instead" or "use &amp; instead of &".

External CSS on Google's home page would mean billions of extra HTTP requests. Adding the amp; would mean terabytes of data transfer to fix something that works just fine in all browsers.

  Adding the amp; would mean terabytes of data transfer to
  fix something that works just fine in all browsers.
If thats the case even more can be saved by optimizing the current version. Don't be blinded by the fact that it is Google: the code clearly shows that it is this way because nobody cares, not because it was thought out very throughly. Point in case:

  <input autocomplete="off" maxlength=2048 name=q class="lst" title="Google Search"
  value="" size=57 style="background:#fff;border:1px solid #ccc;border-bottom-
  color:#999;border-right-color:#999;color:#000;font:18px arial,sans-serif
  bold;height:25px;margin:0;padding:5px 8px 0 6px;vertical-align:top">
Could be just:

  <input autocomplete=off maxlength=2048 name=q class=lst title="Google Search"
  size=57 style="background:#fff;border:1px solid;border-color:#ccc #999 #999
  #ccc;font:18px arial,sans-serif bold;height:25px;margin:0;padding:5px 8px 0 6px;">
Even more, it could be just

  <input autocomplete=off maxlength=2048 name=q class=lst title="Google Search"
  size=57>
because there is already .lst in CSS section, why not to specify attributes there?
So if it's OK for Google to skip on standards, it's OK for the rest of us too. right?
It's a conscious business decision they have made, you can do whatever you want to with your business. As long as it looks right in all browser/os configurations I don't think your customers will mind.
It's OK for anyone to do anything they want with standards, you can ignore them or follow them at your pleasure.

Whether or not you decide to ignore standards - there may or may not be consequences. And if there are consequences, you still might have perfectly valid reasons for accepting those risks.

For a long time, arguably even till now, Microsoft didn't pay enough attention to web standards. They made a business decision for whatever reasons which is their perogative. One of the consequences is that they've lost a lot of browser market share. Whether that matters to them or not I don't know.

I suspect that Google balanced the benefits and harms of strict adherence to HTML and CSS standards and found that, for that page at least, it would be much worse to be anal about standards and the impact to the user, if they didn't meet the standards, would be pretty much nil.

Makes sense to me.

Ehm, they are either using obsolete tags or failed escaped the & sign. Nothing to be worried about.
Whenever I see things along this line, I think back to something a mentor and close friend of mine has said, repeatedly:

  You should never do this.  Unless you have a really good reason.
Do not think for one second someone from Google is going to see this and go, "Oh darn it, I knew I was supposed to do something before google went live."
It seems obvious to me, but I will point it out anyway.

The Google homepage contains all sorts of 'non-conformant' code, so as it supports legacy browsers which don't implement css properly, or require some sort of quirk for them to work correctly.