What random actually means
The PCM sets a cylinder-specific misfire code (P0301 through P0308) when one cylinder is contributing more than half of the misfire events over a defined window. When misfires are spread across multiple cylinders and no single one hits threshold, you get P0300 instead. That distinction is the whole diagnostic clue: whatever is failing affects the engine as a system, not one plug or one coil.
The three system-level causes
The vast majority of true random misfires come from one of three things. First, a lean condition across all cylinders (vacuum leak, weak fuel pump, restricted filter). Second, low compression across the bank from a timing chain that jumped a tooth or worn cam lobes. Third, EGR flooding the intake at idle from a stuck-open valve or carboned passages.
Skip the coil swap. Pull fuel trims first. Positive double-digit trims on both banks point at fuel or air. Even trims with a rough idle point at mechanical timing or EGR.
Confirming before you sell the job
Before you quote a timing chain, verify with a relative compression test using the starter current waveform, or run a running compression test on two cylinders per bank. Sell the repair on data, not on a hunch, and your comeback rate drops to near zero.