“Tracking” can be a bit tricky … :ba: … :ba: … :ba: … particularly when you work on setting the X, Y, and Z axis of the Track constraint.
Yes, it can be very handy to use an Empty as a go-between… parenting (or otherwise associating) the Empty with the “real” object that is to be tracked, and then tracking that Empty. Because this gives you something that you can “grab ahold of and push just a leee-tle bit” to get that light to point exactly where you want it.
Y’know the expression, "watch the little birdie!!" :yes: Well, an Empty is sometimes a great “little birdie.” It is literally “just a point in 3D space,” yet it is an object. It has a position and it has an orientation, it can parent and be parented and can participate in constraints … it can even be animated … yet it is non-visual.