Hi,
Since it works on the product details page, the most likely reason is that there is a view override of the product / listing_img_title view file which doesn't includes the code to display the webp images:
if($this->config->get('add_webp_images', 1) && function_exists('imagewebp') && !empty($img->webpurl)) {
$html = '
<picture>
<source srcset="'.$img->webpurl.'" type="image/webp">
<source srcset="'.$img->url.'" type="image/'.$img->ext.'">
'.$html.'
</picture>
';
}
So I would recommend checking the view overrides. You can also try to display the products listing with the default template to rule out view overrides.