A new class of cyclic codes, cyclic product codes, is characterized. These codes enjoy the implementation advantages of cyclic codes and, in addition, possess the important structural properties of product (iterated) codes. The main results are as follows: \begin{enumerate} \item Conditions are given which ensure that the product of two, and, hence, arbitrarily many, cyclic codes is itself a cyclic code. \item Cyclic product codes are shown to be capable of unambiguous correction of both bursts and random errors. \item The generator polynomial of the cyclic product code is derived and shown to be a simple function of the generator polynomials of the subcodes. \end{enumerate} These results have the following various applications: a) the codes effect a compromise between random and burst-error-correcting codes and, therefore, appear to be well-suited to error correction on channels in which both types of errors occur, b) many codes in a particular subclass of the class of cyclic product codes are efficient burst-error correctors and are more easily implemented than the equivalent codes formed by interleaving short codes, c) the previously mentioned results 1) and 3) can be applied to some cyclic codes to show that they are product codes as well; then known results on the minimum distance of product codes can be applied. This improves on the Bose-Chaudhuri-Hocquenghem lower bound in many cases.