Compare commits

...

3 Commits

Author SHA1 Message Date
Mr¤KayJayDee
2378febe6f add ads.txtx 2025-07-25 23:04:31 +02:00
Mr¤KayJayDee
c79b818302 feat(analytics): intégration de Google Analytics et mise à jour du sitemap
- Remplacement de Google Tag Manager par Google Analytics (gtag.js) dans index.html pour le suivi des performances.
- Ajout d'une fonction de suivi des pages vues dans le routeur pour améliorer l'analyse des données.
- Mise à jour des dates de dernière modification dans sitemap.xml pour refléter la date actuelle.
- Révision des règles dans robots.txt pour un meilleur contrôle d'indexation.
2025-07-07 18:06:43 +02:00
Mr¤KayJayDee
a8509416ae fix(header): suppression de la route de formation dans le menu de navigation
- Commenté la route de formation dans le composant AppHeader.vue pour éviter son affichage.
- Aucune autre modification apportée au fichier.
2025-07-05 22:47:45 +02:00
6 changed files with 67 additions and 91 deletions

View File

@@ -5,16 +5,19 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Google Tag Manager --> <!-- Google tag (gtag.js) -->
<script>(function (w, d, s, l, i) { <script async src="https://www.googletagmanager.com/gtag/js?id=G-CDVVNFY6MV"></script>
w[l] = w[l] || []; w[l].push({ <script>
'gtm.start': window.dataLayer = window.dataLayer || [];
new Date().getTime(), event: 'gtm.js' function gtag() { dataLayer.push(arguments); }
}); var f = d.getElementsByTagName(s)[0], gtag('js', new Date());
j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src =
'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); gtag('config', 'G-CDVVNFY6MV');
})(window, document, 'script', 'dataLayer', 'GTM-5QH68BVJ');</script> </script>
<!-- End Google Tag Manager -->
<!-- Google AdSense -->
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5219367964457248"
crossorigin="anonymous"></script>
<!-- Primary Meta Tags --> <!-- Primary Meta Tags -->
<title>Full Stack Developer Freelance Vue.js React Node.js | Killian Dalcin</title> <title>Full Stack Developer Freelance Vue.js React Node.js | Killian Dalcin</title>
@@ -238,11 +241,6 @@
</head> </head>
<body> <body>
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5QH68BVJ" height="0" width="0"
style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<div id="app"></div> <div id="app"></div>
<script type="module" src="/src/main.ts"></script> <script type="module" src="/src/main.ts"></script>

1
public/ads.txt Normal file
View File

@@ -0,0 +1 @@
google.com, pub-5219367964457248, DIRECT, f08c47fec0942fa0

View File

@@ -1,30 +1,5 @@
# Robots.txt pour killiandalcin.fr
# Optimisé pour un crawling Google efficace
# Googlebot
User-agent: Googlebot
Allow: /
Crawl-delay: 0
# Bingbot
User-agent: Bingbot
Allow: /
Crawl-delay: 1
# Tous les bots légitimes
User-agent: * User-agent: *
Allow: /
Disallow: /api/
Disallow: /admin/ Disallow: /admin/
Disallow: /*.json$ Disallow: /api/
Disallow: /*?* Disallow: /*?*
Allow: /*.css$ Sitemap: https://killiandalcin.fr/sitemap.xml
Allow: /*.js$
Allow: /*.webp$
Allow: /*.jpg$
Allow: /*.png$
Allow: /*.svg$
Allow: /*.woff2$
# Sitemap
Sitemap: https://killiandalcin.fr/sitemap.xml

View File

@@ -3,52 +3,40 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<!-- Home Page - Maximum Priority --> <!-- Home Page -->
<url> <url>
<loc>https://killiandalcin.fr/</loc> <loc>https://killiandalcin.fr/</loc>
<lastmod>2025-01-14</lastmod> <lastmod>2025-07-07</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url> </url>
<!-- Fiverr Services Page - High Priority (Business Focus) --> <!-- Fiverr Services Page -->
<url> <url>
<loc>https://killiandalcin.fr/fiverr</loc> <loc>https://killiandalcin.fr/fiverr</loc>
<lastmod>2025-01-14</lastmod> <lastmod>2025-07-07</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url> </url>
<!-- Projects Portfolio Page --> <!-- Projects Portfolio Page -->
<url> <url>
<loc>https://killiandalcin.fr/projects</loc> <loc>https://killiandalcin.fr/projects</loc>
<lastmod>2025-01-14</lastmod> <lastmod>2025-07-07</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url> </url>
<!-- Contact Page --> <!-- Contact Page -->
<url> <url>
<loc>https://killiandalcin.fr/contact</loc> <loc>https://killiandalcin.fr/contact</loc>
<lastmod>2025-01-14</lastmod> <lastmod>2025-07-07</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url> </url>
<!-- About Page --> <!-- About Page -->
<url> <url>
<loc>https://killiandalcin.fr/about</loc> <loc>https://killiandalcin.fr/about</loc>
<lastmod>2025-01-14</lastmod> <lastmod>2025-07-07</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url> </url>
<!-- Formation/Training Page --> <!-- Formation/Training Page -->
<url> <url>
<loc>https://killiandalcin.fr/formation</loc> <loc>https://killiandalcin.fr/formation</loc>
<lastmod>2025-01-14</lastmod> <lastmod>2025-07-07</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url> </url>
<!-- Dynamic Project Detail Pages --> <!-- Dynamic Project Detail Pages -->
@@ -56,57 +44,43 @@
<!-- Virtual Tour Project --> <!-- Virtual Tour Project -->
<url> <url>
<loc>https://killiandalcin.fr/project/virtual-tour</loc> <loc>https://killiandalcin.fr/project/virtual-tour</loc>
<lastmod>2025-01-14</lastmod> <lastmod>2025-07-07</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url> </url>
<!-- Xinko Discord Bot Project (Featured) --> <!-- Xinko Discord Bot Project -->
<url> <url>
<loc>https://killiandalcin.fr/project/xinko</loc> <loc>https://killiandalcin.fr/project/xinko</loc>
<lastmod>2025-01-14</lastmod> <lastmod>2025-07-07</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url> </url>
<!-- Image Manipulation NPM Package (Featured) --> <!-- Image Manipulation NPM Package -->
<url> <url>
<loc>https://killiandalcin.fr/project/image-manipulation</loc> <loc>https://killiandalcin.fr/project/image-manipulation</loc>
<lastmod>2025-01-14</lastmod> <lastmod>2025-07-07</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url> </url>
<!-- Flowboard Project Management App (Featured) --> <!-- Flowboard Project Management App -->
<url> <url>
<loc>https://killiandalcin.fr/project/flowboard</loc> <loc>https://killiandalcin.fr/project/flowboard</loc>
<lastmod>2025-01-14</lastmod> <lastmod>2025-07-07</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url> </url>
<!-- Primate Web Admin Project --> <!-- Primate Web Admin Project -->
<url> <url>
<loc>https://killiandalcin.fr/project/primate-web-admin</loc> <loc>https://killiandalcin.fr/project/primate-web-admin</loc>
<lastmod>2025-01-14</lastmod> <lastmod>2025-07-07</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url> </url>
<!-- Instagram Bot Project --> <!-- Instagram Bot Project -->
<url> <url>
<loc>https://killiandalcin.fr/project/instagram-bot</loc> <loc>https://killiandalcin.fr/project/instagram-bot</loc>
<lastmod>2025-01-14</lastmod> <lastmod>2025-07-07</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url> </url>
<!-- Crowdin Status Bot Project --> <!-- Crowdin Status Bot Project -->
<url> <url>
<loc>https://killiandalcin.fr/project/crowdin-status-bot</loc> <loc>https://killiandalcin.fr/project/crowdin-status-bot</loc>
<lastmod>2025-01-14</lastmod> <lastmod>2025-07-07</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url> </url>
</urlset> </urlset>

View File

@@ -14,7 +14,7 @@ const navigation = computed(() => [
{ name: t('nav.projects'), path: '/projects' }, { name: t('nav.projects'), path: '/projects' },
{ name: t('nav.about'), path: '/about' }, { name: t('nav.about'), path: '/about' },
{ name: t('nav.contact'), path: '/contact' }, { name: t('nav.contact'), path: '/contact' },
{ name: t('nav.formation'), path: '/formation' }, // { name: t('nav.formation'), path: '/formation' },
{ name: t('nav.fiverr'), path: '/fiverr' }, { name: t('nav.fiverr'), path: '/fiverr' },
]) ])

View File

@@ -1,7 +1,15 @@
import { createRouter, createWebHistory } from 'vue-router' import { createRouter, createWebHistory, type RouteLocationNormalized } from 'vue-router'
import { nextTick } from 'vue' import { nextTick } from 'vue'
import HomePage from '../views/HomePage.vue' import HomePage from '../views/HomePage.vue'
// Google Analytics gtag types
declare global {
interface Window {
dataLayer: unknown[]
gtag: (...args: unknown[]) => void
}
}
const router = createRouter({ const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL), history: createWebHistory(import.meta.env.BASE_URL),
routes: [ routes: [
@@ -94,9 +102,20 @@ router.beforeEach((to, from, next) => {
next() next()
}) })
// Additional scroll to top handler for better compatibility // Google Analytics page view tracking function
router.afterEach(() => { const trackPageView = (route: RouteLocationNormalized) => {
// Use nextTick to ensure the DOM is fully updated // Track page view with gtag
if (window.gtag) {
window.gtag('config', 'G-CDVVNFY6MV', {
page_path: route.path,
page_title: document.title,
page_location: window.location.href
})
}
}
// Track page views on route changes
router.afterEach((to) => {
nextTick(() => { nextTick(() => {
// Smooth scroll to top // Smooth scroll to top
window.scrollTo({ window.scrollTo({
@@ -104,7 +123,16 @@ router.afterEach(() => {
left: 0, left: 0,
behavior: 'smooth' behavior: 'smooth'
}) })
// Track page view for GTM
trackPageView(to)
}) })
}) })
// Track initial page load
router.isReady().then(() => {
// Track the initial route after router is ready
trackPageView(router.currentRoute.value)
})
export default router export default router