Ethereum's proof-of-work protocol used a modified version of the GHOST (Greedy Heaviest Observed Subtree) rule to decide which competing block became canonical, and an uncle block was the byproduct: a full, correctly mined block that lost that race but was still referenced by a later "nephew" block instead of being discarded outright.
Because Ethereum's block time ran roughly 13 to 15 seconds, far shorter than Bitcoin's 10 minutes, two miners finding valid blocks at nearly the same height happened often. Rather than let that computational effort go to waste, as happens with a Bitcoin orphan block, Ethereum's protocol let a canonical block cite up to two recent uncles by hash, folding their proof-of-work into the chain's total difficulty.
Rewards followed a sliding formula: an uncle included one block later earned 7/8 of the standard block reward, decreasing by 1/8 for each additional block of delay, up to six blocks late. The miner who referenced the uncle also earned a smaller "nephew" bonus of 1/32 of the block reward per uncle cited. This gave smaller mining operations a fairer shot at earning something even when a larger, better-connected pool won the main block, and it raised the cost of rewriting history, since an attacker had to out-produce both the canonical chain and its uncles.
Uncle blocks disappeared from Ethereum mainnet with the September 2022 Merge, when EIP-3675 moved consensus to proof-of-stake validators proposing one block per slot rather than competing miners. Ethereum Classic, which kept proof-of-work after splitting from Ethereum, still produces uncle blocks today.