The most pure approach is to issue an asset representing a certificate of authenticity for a particular product. The asset has as many units as there are units of the product issued. Each time the physical good changes hands, some of the asset changes hands as well, creating a chain of custody record on the chain. The key logistical challenge here is to ensure that every point of physical handover maps to a transaction transferring assets.
A less pure, but perhaps more practical approach, is to use streams, with keys in the stream representing items or batches. At various points along the way, data is written to the stream to represent an event relating to that item or batch. In this case, you don't need an absolute chain of custody representing every handover, but instead simply have a way of keeping track of all events relevant to the product.