Here’s the method I normally use:
create one uvmap for all tiles, so that each tile occupies the whole UV area.
create another uvmap, but with all tiles as islands, and then scale the islands to Zero (with individual origin selected).
then you can use the second uvmap to drive a noise for the randomness, and the first for the textures.
an example blend:
ps: what I really did was:
create one tile, unwrap.
add two array modifiers (X and Y) and apply.
add a new uvmap, and unwrap again.
with uv selection set to islands and pivot to individual origins, scale the islands to 0.
play with the material.