Best practice would be to have a pre-gameplay scene dedicated to DDOL objects, where you will instantiate and initialize evrything you’re going to need in all scenes. Once everything is ready, you can load your main menu, and never go back to that pre-gameplay scene, so you won’t have to worry about duplicates.
@corn approach is a valid solution that can work well in some cases.
Another option is to use a Singleton class. This enforce that only one copy of that class will be created plus it allows you to access it from any other script without having a direct reference. It is very useful for things like AudioManager, InputSystem, ScenesLoader and any other scripts where you want to guarantee a single copy and you want the ability to call them from various area of the code.
Just attach the following script to the GameObject in question.
Here is a simple example of Singleton implementation that worked well for me: