Hallo Klaus,
das Problem ist wahrscheinlich ein alter Aufruf des Thumbnails.
<?php echo $product->images[0]->displayMediaThumb('class="browseProductImage"', false); ?>
Die Funktion nimmt weitere Argumente.
function displayMediaThumb($imageArgs=array(),$lightbox=true,$effect="class='modal' rel='group'",$return = true,$withDescr = false,$absUrl = false, $width=0,$height=0)
Der Aufruf könnte also ähnlich wie dieser sein:
displayMediaThumb($meinArrayMitZbCssKlassen, true, '', true, false, 270, 270);
Wer genauer wissen möchte, was in $meinArray... stehen kann, muss in die Funktion schauen. Ich nehme alles mit in $imageArgs hinein, was auch unter $effect stehen kann, mache ein großes Array für $imageArgs und lasse $effect leer. Um rückwärtskompatibel zu bleiben, gibt es $effect noch, ist aber nicht mehr nötig.
Wenn man die Breite und Höhe angibt, dann wird der Platz für das Bild reserviert, und dann sollte auch der Name sofort herunter rutschen.
Im Moment dürfte das nach oben gerutscht sein, weil das Bild keine Höhe hatte, und dann das matchHeight-Script des Horme den Container auf Höhe 0 gesetzt hat. Das Bild geht dann über den 0px hohen Container hinaus und wird trotzdem dargestellt.
Es braucht also eine Bild-Höhe, die das HTML beim Laden kennt, bevor das matchHeight-Skript ansetzt.
Beim zweiten Laden ist evtl. das Template-CSS schon im Cache, und dann ist das geladen, bevor das matchHeight-Skript arbeitet.
Höhe und Breite in der Funktion sind essentiell, früher schon, heute erst recht, weil man sonst ein wackelndes Layout bekommt (CLS) und das mag der Benutzer nicht, und deshlalb mag es auch Google nicht. Google's Lighthouse beurteilt das CLS.
Grüße
Stefan