From fe6a11f43693a33e22c05d1847c2cc29c27ae0cc Mon Sep 17 00:00:00 2001 From: "Eng.Alhareth Al-Dahya" Date: Sun, 4 Oct 2026 18:37:19 +0300 Subject: [PATCH 01/44] feat(seo): add university major choice guide route --- routes/web.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/routes/web.php b/routes/web.php index bf87750..2b6899a 100644 --- a/routes/web.php +++ b/routes/web.php @@ -16,6 +16,9 @@ Route::view('/career-interests-test', 'seo.career-interests') ->name('career-interests.index'); +Route::view('/how-to-choose-university-major', 'seo.choose-major') + ->name('major-choice.index'); + Route::get('/sitemap.xml', SitemapController::class)->name('sitemap'); Route::get('/specializations', [SpecializationController::class, 'index']) From df5d7edfcf957a17461c2e81e1484435c7ae5be5 Mon Sep 17 00:00:00 2001 From: "Eng.Alhareth Al-Dahya" Date: Sun, 4 Oct 2026 18:37:22 +0300 Subject: [PATCH 02/44] feat(seo): include major choice guide in sitemap --- app/Http/Controllers/SitemapController.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Http/Controllers/SitemapController.php b/app/Http/Controllers/SitemapController.php index 89015e7..deb0336 100644 --- a/app/Http/Controllers/SitemapController.php +++ b/app/Http/Controllers/SitemapController.php @@ -12,6 +12,7 @@ public function __invoke(SpecializationCatalogService $catalog): Response $urls = [ route('home'), route('career-interests.index'), + route('major-choice.index'), route('specializations.index'), ]; From 56af71af4d70aff76dfc776f120e412e0fbb8183 Mon Sep 17 00:00:00 2001 From: "Eng.Alhareth Al-Dahya" Date: Sun, 4 Oct 2026 18:37:44 +0300 Subject: [PATCH 03/44] feat(seo): expose major choice guide in public SEO surface --- resources/views/layouts/app.blade.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 541ab02..8a7757b 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -22,6 +22,7 @@ $seoIsIndexablePublicPage = request()->routeIs( 'home', 'career-interests.index', + 'major-choice.index', 'specializations.index', 'specializations.show', ); @@ -298,6 +299,9 @@ class="site-footer-social-link"
  • اختبار الميول المهنية
  • +
  • + كيف أختار تخصصي؟ +
  • التخصصات
  • From f7522b45a6c11b0cf5cfb4921aae0c828ec1c74e Mon Sep 17 00:00:00 2001 From: "Eng.Alhareth Al-Dahya" Date: Sun, 4 Oct 2026 18:37:48 +0300 Subject: [PATCH 04/44] feat(seo): add major choice guide breadcrumb schema --- resources/views/seo/json-ld.blade.php | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/resources/views/seo/json-ld.blade.php b/resources/views/seo/json-ld.blade.php index 3d68b37..b30e6e3 100644 --- a/resources/views/seo/json-ld.blade.php +++ b/resources/views/seo/json-ld.blade.php @@ -79,6 +79,32 @@ ]; } + if (request()->routeIs('major-choice.index')) { + $seoBreadcrumbId = $seoCanonical.'#breadcrumb'; + $seoGraph[2]['breadcrumb'] = [ + '@id' => $seoBreadcrumbId, + ]; + + $seoGraph[] = [ + '@type' => 'BreadcrumbList', + '@id' => $seoBreadcrumbId, + 'itemListElement' => [ + [ + '@type' => 'ListItem', + 'position' => 1, + 'name' => 'الرئيسية', + 'item' => $seoHomeUrl, + ], + [ + '@type' => 'ListItem', + 'position' => 2, + 'name' => 'كيف أختار تخصصي الجامعي؟', + 'item' => $seoCanonical, + ], + ], + ]; + } + if (request()->routeIs('specializations.index')) { $seoBreadcrumbId = $seoCanonical.'#breadcrumb'; $seoGraph[2]['breadcrumb'] = [ From 8ef202a86b3a34ca67a1d58d7498f047e74303bd Mon Sep 17 00:00:00 2001 From: "Eng.Alhareth Al-Dahya" Date: Sun, 4 Oct 2026 18:38:52 +0300 Subject: [PATCH 05/44] feat(seo): add university major choice guide --- resources/views/seo/choose-major.blade.php | 139 +++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 resources/views/seo/choose-major.blade.php diff --git a/resources/views/seo/choose-major.blade.php b/resources/views/seo/choose-major.blade.php new file mode 100644 index 0000000..db87272 --- /dev/null +++ b/resources/views/seo/choose-major.blade.php @@ -0,0 +1,139 @@ +@extends('layouts.app') + +@section('title', 'كيف أختار تخصصي الجامعي؟ | دليل عملي للطلاب') +@section('seo_description', 'كيف تختار تخصصك الجامعي؟ ابدأ بفهم ميولك وقدراتك وقيمك، ثم افهم طبيعة التخصص وقارن الخيارات بخطوات عملية تساعدك على اتخاذ قرار واعٍ بعد الثانوية.') + +@section('content') +
    + + +
    +
    +
    +

    دليل عملي بعد الثانوية

    +

    + كيف أختار تخصصي الجامعي؟ +

    +

    + لا يبدأ الاختيار باسم التخصص، بل بفهم نفسك أولًا، ثم فهم الخيارات المتاحة، ثم المقارنة بينها بوعي. الهدف ليس العثور على «تخصص مثالي»، بل الوصول إلى قرار تستطيع تفسيره والتحقق منه. +

    + + +
    + +
    + طالب يفكر في اختيار تخصصه الجامعي بعد الثانوية + +
    +
    +
    + +
    +

    ثلاث خطوات أساسية

    +

    ابدأ بهذه الطريقة بدل البحث العشوائي

    + +
      +
    1. + 1 +

      افهم نفسك

      +

      راجع ميولك، الأنشطة التي تستمتع بها، قدراتك التي تريد تطويرها، قيمك وأهدافك، وما تعرفه فعلًا عن نفسك من التجربة.

      +
    2. +
    3. + 2 +

      افهم الخيارات

      +

      اقرأ طبيعة الدراسة، المواد والمهارات المطلوبة، الأنشطة داخل التخصص، والمسارات المهنية بدل الاعتماد على اسم التخصص فقط.

      +
    4. +
    5. + 3 +

      قارن بوعي

      +

      ابحث عن نقاط التقارب والتعارض، ثم تحقق من الخيارات الأقرب إليك بقراءة أعمق أو تجربة صغيرة أو سؤال شخص لديه خبرة حقيقية.

      +
    6. +
    +
    + +
    +

    ما العوامل التي أضعها أمامي قبل اختيار التخصص؟

    + +
    +
    +

    ميولك

    +

    ما الأنشطة التي تستمتع بها وتريد تكرارها؟ الميول نقطة بداية، وليست حكمًا نهائيًا على مستقبلك.

    +
    +
    +

    قدراتك واستعدادك للتعلم

    +

    لا تسأل فقط: «هل أنا جيد الآن؟» بل أيضًا: «هل أنا مستعد لتعلم المهارات التي يتطلبها هذا التخصص؟»

    +
    +
    +

    طبيعة الدراسة

    +

    افهم كيف ستتعلم فعليًا: قراءة، تحليل، مختبر، تدريب عملي، تصميم، تواصل، مشاريع أو عمل ميداني.

    +
    +
    +

    قيمك وأهدافك

    +

    ما الذي تريد أن يكون مهمًا في حياتك ودراستك وعملك؟ لا تجعل قرارك مجرد استجابة لرأي الآخرين.

    +
    +
    +

    الظروف الواقعية

    +

    ضع في الحسبان الجامعة المتاحة، التكلفة، المكان، متطلبات القبول، الوقت والقيود التي تحتاج إلى خطة أو بديل.

    +
    +
    +

    المعلومة والتجربة

    +

    كلما عرفت التخصص من مصادر موثوقة وجرّبت نشاطًا قريبًا منه، أصبح قرارك مبنيًا على معرفة أكثر وتخمين أقل.

    +
    +
    +
    + +
    +
    +

    محتار أي تخصص أدخل؟ لا تبدأ بهذه الأخطاء

    +
      +
    • اختيار التخصص لأن اسمه مشهور فقط.
    • +
    • الاعتماد على الراتب أو المكانة وحدهما.
    • +
    • ترك شخص آخر يقرر بدلًا عنك دون فهمك لطبيعة الاختيار.
    • +
    • اعتبار نتيجة اختبار واحد إجابة نهائية لا تحتاج إلى تحقق.
    • +
    • رفض تخصص قبل معرفة مواده وأنشطته ومساراته الفعلية.
    • +
    +
    + +
    +

    هل اختبار الميول يكفي لاختيار التخصص؟

    +

    + لا. اختبار الميول يساعدك على فهم المجالات والأنشطة التي تجذبك أكثر، لكنه لا يقيس كل شيء ولا يقرر عنك. استخدم نتيجته مع فهم طبيعة الدراسة وقدراتك وقيمك وظروفك الواقعية. +

    + + تعرّف إلى اختبار الميول المهنية + +
    +
    + +
    +

    خطوتك التالية: حوّل الحيرة إلى مقارنة

    +

    + اختر تخصصين أو ثلاثة يبدون قريبين منك، واقرأ لكل واحد طبيعة الدراسة والمهارات والأنشطة والمسارات المهنية. سجّل ما يجذبك وما يقلقك، ثم ارجع إلى ميولك وظروفك بدل الاختيار بالانطباع الأول. +

    + +
    +
    +@endsection From db9afa864fef7c6b7b780ff2d2f9e39852ce72d7 Mon Sep 17 00:00:00 2001 From: "Eng.Alhareth Al-Dahya" Date: Sun, 4 Oct 2026 18:38:55 +0300 Subject: [PATCH 06/44] test(seo): cover university major choice guide --- tests/Feature/SeoMajorChoiceGuideTest.php | 87 +++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 tests/Feature/SeoMajorChoiceGuideTest.php diff --git a/tests/Feature/SeoMajorChoiceGuideTest.php b/tests/Feature/SeoMajorChoiceGuideTest.php new file mode 100644 index 0000000..a4f72bb --- /dev/null +++ b/tests/Feature/SeoMajorChoiceGuideTest.php @@ -0,0 +1,87 @@ +get(route('major-choice.index')); + + $response + ->assertOk() + ->assertSee( + 'كيف أختار تخصصي الجامعي؟ | دليل عملي للطلاب | مسارك', + false + ) + ->assertSee('كيف أختار تخصصي الجامعي؟') + ->assertSee('افهم نفسك') + ->assertSee('افهم الخيارات') + ->assertSee('قارن بوعي') + ->assertSee('محتار أي تخصص أدخل؟') + ->assertDontSee('', false) + ->assertSee( + '', + false + ) + ->assertSee( + '', + false + ); + } + + public function test_major_choice_guide_links_to_interest_exploration_and_specializations(): void + { + $response = $this->get(route('major-choice.index')); + + $response + ->assertOk() + ->assertSee('href="'.route('career-interests.index').'"', false) + ->assertSee('href="'.route('specializations.index').'"', false); + } + + public function test_major_choice_guide_emits_webpage_image_and_two_level_breadcrumb_json_ld(): void + { + $response = $this->get(route('major-choice.index')); + + $response->assertOk(); + + $html = $response->getContent(); + + $this->assertIsString($html); + + preg_match( + '/