In my geth node I see sometimes on the output the message
block reached canonical chain
I tried googling for the answer but could not find one. Does anyone know what this means.
Without knowing why geth decides to write it like that I can give you a generic answer.
Canonical chain is the chain which is agreed to be the 'main' chain and not one of the side-chains which end. In theory it is never 100% sure which chain is the canonical chain. In theory you could still revert block number 1 (or is it block 2 which is after genesis block) by continuing its side-chains with enough hashing power.
In practise different parties decide for themselves how many blocks they require on top of the block they're interested in for it to be considered part of the canonical chain. The more blocks there are mined on top of it, the more likely the block is to be part of the canonical chain. That is also what exchanges are referring to when they "require X confirmations" for transfers before accepting them. Typically this number is something like 5-10 for Ethereum.
So, I assume geth has decided on an internal X for the amount of confirmations it requires for a block to be considered part of the canonical chain. And when a block has reached that amount of confirmations (blocks on top of it) geth tells you a block has reached canonical chain.