Once upon a time, all web pages were static HTML pages, SEO was a very simple process, and life was good.
Then, dynamic content appeared so webmasters could query a database, but SEO got much more complicated. At first, the search engines did not read query strings, and webmasters everywhere complained. So, then the search engines changed so they could read the query sting, and that's when things got incredibly complicated.
"?source=abc" is an innocent way to track incoming traffic to a site. It's great because you can use it to track your PPC campaigns, affiliate links, and even internal site traffic.
However, "default.asp?source=abc" is read as a completely different URL than "default.asp?source=xyz" so if they both go the same page, it creates duplicate content (and this is true in all of the search engines).
Without realizing what was happening, millions of websites around the planet started using query strings and created duplicate content on an unbelievably grand scale. Then, webmasters everywhere started wondering why their positions in the SERPs began to sink. They blamed it on updates, algorithm changes, and some even thought they were being punished by some person sitting on the other side of the screen.
Few people seemed to notice the plethora of patents on detecting duplicate content that have been granted to the search engines. It seems that even fewer people make the connection to sinking SERPs for sites that supposedly have been online and on top of the charts for years.
But if you show me a site that is sinking in the SERPs, I can guarantee that the same site has duplicate content that has been growing exponentially behind the scenes. The latest "updates" to the search engine algorithms may merely be adding new ways to detect duplicate content, or the duplicity may have reached a point that has pushed the site "over the edge" and started it sinking.
And now, the search engines seem to be following each other's query strings that appear in text Ads, so Yahoo will show a Google PPC tracking string in a URL, which causes duplicate content each time a new URL (with a unique tracking code) is added to the index.
I have fixed this on one site by putting 404 server header codes to delete the old pages, and by including the META tag (META NAME="robots" CONTENT="noindex") whenever a query string is used.
However, this is a real problem for dynamic sites that use query strings for other purposes. A dynamic site could have a page URL of: "/dept.asp?did=6&page=1" and the PPC tracking code will be added onto that string so it becomes: "/dept.asp?did=6&page=1?source=google_ad_code" so the best solution is to use a unique identifier that is appended to the string, and only put out a 404 and add the META tag to the page when that string is detected.
Did I mention that SEO used to be a very simple process?