Aside from fancy shader tricks like Tri-Planar mapping, it's very important to decorate cliffs using Static Meshes in order to maximize the detail. With Nanite, World Partition and HLOD's this technique has only become more performant with Unreal Engine 5.
Here is an example using the Brushify Cliffs pack:
The cliffs pack is the perfect tool for adding detail to vertical cliffs, because it provides you with several different cliff assets that can be used for set dressing:
The idea is to 'slot' these meshes into the landscape to create more complexity. They help to cover up any flat/boring vertical slopes.
The assets are also built fully encapsulated. That means you can rotate them 360 degrees and there won't be any open edges that require manual cover up.
The final results lead to a landscape with lots of vertical cliff detail.
With the Brushify Canyons pack you can use large canyon pieces in a similar way: