@php use App\Helpers\SchemaCollector; $courseItems = []; foreach($courses as $course) { $item = [ '@type' => 'Course', 'name' => $course->title, 'description' => !empty($course->about) ? strip_tags($course->about) : ($course->title . ' - Learn with ' . (Settings('site_title') ?? 'LMS')), 'url' => courseDetailsUrl($course->id, $course->type, $course->slug), 'image' => getCourseImage($course->thumbnail), 'provider' => [ '@type' => 'Organization', 'name' => Settings('site_title') ?? 'Website', 'url' => url('/'), ], // hasCourseInstance is required by Google for Course rich results 'hasCourseInstance' => [[ '@type' => 'CourseInstance', 'courseMode' => 'online', 'instructor' => [ '@type' => 'Person', 'name' => $course->user->name ?? (Settings('site_title') ?? 'Instructor'), ], ]], 'offers' => [ '@type' => 'Offer', 'price' => $course->discount_price ?? $course->price ?? 0, 'priceCurrency' => Settings('currency_code') ?? 'USD', 'availability' => 'https://schema.org/InStock', 'url' => courseDetailsUrl($course->id, $course->type, $course->slug), 'category' => 'Paid', ], ]; // Only add aggregateRating if there are actual reviews if (!empty($course->total_reviews) && $course->total_reviews > 0 && !empty($course->totalReview) && $course->totalReview > 0) { $item['aggregateRating'] = [ '@type' => 'AggregateRating', 'ratingValue' => round((float)$course->totalReview, 1), 'reviewCount' => (int)$course->total_reviews, 'bestRating' => 5, 'worstRating' => 1, ]; } // Only add educationalLevel if not empty if (!empty($course->courseLevel->title)) { $item['educationalLevel'] = $course->courseLevel->title; } $courseItems[] = $item; } if (!empty($courseItems)) { SchemaCollector::addCourses($courseItems); } @endphp