It depends how you use your bitcoin addresses. If you're lazy like me and reuse your bitcoin address for multiple transactions then yes.

Let's walk through this with one of my wallet addresses.

https://blockchain.info/address/1PWSyqweZ7SZ8AMi9hWRtEU5Cd7P...

You can see that I sent 0.00597702 BTC to an address beginning "1Jtfi". That was worth $3.99 yesterday, suggesting a USD pricing structure for that transaction.

In the previous transaction, you can see 0.1198 BTC ($79.49) being paid to me. You might deduce that I sold something for bitcoin, or that I bought some bitcoin from someone. Given that they came from six different addresses, you might conclude that this is probably not a direct person-to-person trade, but went through some sort of escrow or mixer. The odd USD value might suggest non-USD, but it could easily have been $80 yesterday.

Prior to that, I paid the same 1Jtfi address 0.0278 BTC. If you track the exchange rate back to the date of that TX, you can see it works out to $3.99 again, showing that I'm paying the same entity the same amount of money on multiple occasions.

Prior to that, 1AVZ paid me 0.00271878 BTC

Prior to that, I paid 0.0326 BTC to 1P4v.

Let's assume that 1Jtfi is the cafe (it's actually me buying reddit gold for people, hence $3.99 each time). They can look up my blockchain info (not just on blockchain.info, that's just a convenient way of browsing it) and see the whole ledger.

If the cafe knows that the 1P4v address is a porn site (let's say the porn site publish a donation address), then it's incontrovertible.

Another example, try to 'follow the money' on my first purchase of bitcoin: https://blockchain.info/address/1ARvvMWkZRXcCupgJCZeiRsZxVGZ...

In that tx, I am 12xSZ buying from 1ARvv.

Click the 'change address' 1BTCcq (nice vanity address).

Now try to track the seller, guess which of the two addresses is him and which is his client. It's pretty obvious that 1DPwh is the buyer and 1P5s1 is the same seller again.

Now we can basically track the smaller amounts, with the theory that the guy I bought from is selling small amount from a large stash, keep clicking the larger amount,

After a couple of transactions though it gets messy: https://blockchain.info/address/1Nt1sd2ECNyjdXmQsrpzqffPS9SJ...

Ah, now who's our guy? Well, it's probably the one who kept an odd number of coins (much more likely someone will buy 5 BTC than 4.86764344 BTC).

Now, the proper way to do it is for me to set up a new address for each transaction and move my funds between addresses every time I transact. That way you can't prove whether me sending $80 to 1abcde is sending to myself or to someone else. You can't trace the funds like we just did, because there's no time to establish patterns. You'd also want to avoid sending BTC to an address you've sent to before, and avoid round numbers of BTC. And avoid transacting at timestamps with a pattern to them.

So, it's theoretically capable of a decent level of anonymity. But as with most things, in practice it is susceptible to human error.

By the way, if you liked this comment, feel free to donate bitcoin to 1PWSyqweZ7SZ8AMi9hWRtEU5Cd7PEvb9em - maybe I can have fun tracing your transactions too :)