ExtraNonce: As well as the Nonce field, There is also an extranonce convention - a part of the unlocking script in the input of the coinbase transaction is used as an extra nonce by miners.
Timestamp: The miner can vary the timestamp. It only has to be accurate within about 2 hours. It doesn't have to be greater than the timestamp of the previous block.
Version: Miners can vary a part of the version number. There is a method known as ASICboost which helps miners who are using ASICs for mining.
Coinbase output: The miner can vary the coinbase output. Perhaps selecting a different receiving address or varying the type of script.
Transaction order: The miner can vary the order of transactions (other than for transactions that spend outputs of prior transactions in same block).
Transactions: The miner can make an arbitrary select of transactions from their mempool or create their own new arbitrary valid transactions to include. If inventing their own transactions they can vary the fee from zero to maximum and can vary the transaction type from legacy to latest. They can also vary the input amounts from near zero to whole UTXO. The transactions must be valid but that still allows a vast range of variations, assuming the miner owns some bitcoin to start with.
From Bitcoin for Developers I
Table 2. The structure of a coinbase transaction input
Size |
Field |
Description |
32 bytes |
Transaction Hash |
All bits are zero: Not a transaction hash reference |
4 bytes |
Output Index |
All bits are ones: 0xFFFFFFFF |
1–9 bytes (VarInt) |
Coinbase Data Size |
Length of the coinbase data, from 2 to 100 bytes |
Variable |
Coinbase Data |
Arbitrary data used for extra nonce and mining tags. In v2 blocks; must begin with block height |
4 bytes |
Sequence Number |
Set to 0xFFFFFFFF |
See also BIP-34