Coupling refers to the degree in which two classes are "dependant" on each other. It can be thought of as a measure of how closely connected two classes are. Coupling is usually contrasted with cohesion and vice-versa.
Classes with low coupling are usually preferable to those with high coupling. This is because low coupling classes are usually associated with being more reusable and more maintainable.
If classes have low coupling you should be able to make a change in just one class and not in multiple different classes.
Semantic coupling is a type of coupling where classes depend on the implementation of other classes. A change in one class will cause a bug in another class.
This can be caused by assumptions about the underlying implementation in the other class, or situations in which two classes must remain in sync in their implementation