transform.position = Vector3.MoveTowards(transform.position, target.transform.position, speed * Time.deltaTime);
You do know that if the target's position is on the ground, then your object's position will also try to match the objects's Y
position. You can try to make an object and check all the constraints, and it will still work if you give it a Translate script, because scripts tend to override constraints.
If you want to make your object go to the target, but still keep his Y
position, you could just make a new target vector :
new Vector3(target.transform.position.x, this.transform.position.y, target.transform.position.z);
and make this the target, so your objects keeps his Y
position since he's already in it, and translates on the XZ-plane
instead.