Table des matières

Comment mettre en œuvre le suivi dans les apps vibe-coded ?

Hands holding map and compass

Vibe-coded applications rapidly built with the help of AI often lack the structured analytics setup needed for reliable data collection. Implementing analytics in such apps is crucial for understanding user behaviour, and Google Tag Manager (GTM) provides a flexible solution. In particular, using a dataLayer is essential for feeding information into GTM and enabling Server-side Tracking.

Ce guide vous aidera à mettre en place le suivi dans une vibe-coded app. Nous avons inclus des invites exactes que vous pouvez coller dans votre agent IA et des conseils pour vérifier que tout est mis en œuvre correctement.

Pourquoi une couche de données structurées est-elle importante dans les applications générées par l'IA ?

Le code généré par l'IA peut être incohérent, introduire une logique en double ou des divergences de dénomination. Cela rend les analyses difficiles à maintenir. Une dataLayer structurée met de l'ordre. La dataLayer est un objet JavaScript qui centralise les données de suivi afin que vous ne récupériez pas d'informations à partir d'éléments DOM aléatoires ou de variables dispersées. Sans une dataLayer propre, les interactions des utilisateurs peuvent être manquées ou suivies de manière imprécise, laissant une équipe ou vous, en tant que fondateur, opérer à l'aveuglette.

dataLayer est essentiel pour le GTM côté client, qui est à son tour essentiel pour le GTM côté serveur, une technologie qui fournit une bien meilleure qualité de données à votre pile technologique. Des outils tels que TAGGRS pour le GTM côté serveur s'appuient sur les données du client. La couche de données garantit que tous les événements et détails importants sont capturés de manière cohérente sur le client et transmis au conteneur du serveur.

Alors, comment faire cela dans votre application codée en vibrato ? Plongeons dans le vif du sujet !

Étape 1 : Ajouter le snippet Google Tag Manager à votre application

La première étape consiste à ajouter Google Tag Manager (GTM) à votre application codée par vibration. Le GTM est chargé via un petit extrait JavaScript que vous collez dans le code HTML de votre application. Ce snippet fait deux choses importantes :

  1. Il charge le conteneur GTM
  2. Il crée un objet dataLayer global que votre application peut utiliser pour envoyer des événements.

Vous n'avez pas besoin d'écrire un code d'installation personnalisé pour le dataLayer. Si GTM est installé correctement, dataLayer existera automatiquement.

Ce qu'il faut faire

Ajoutez le snippet GTM officiel au fichier HTML principal de votre application :

<!-- Google Tag Manager -->
<script>
(function(w,d,s,l,i){
  w[l]=w[l]||[];
  w[l].push({'gtm.start': new Date().getTime(), event:'gtm.js'});
  var f=d.getElementsByTagName(s)[0],
      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);
})(window,document,'script','dataLayer','GTM-XXXXXXX');
</script>
<!-- End Google Tag Manager -->

Remplacez GTM-XXXXXXX par votre propre ID de conteneur GTM que vous pouvez trouver dans le coin supérieur droit de votre conteneur GTM côté client. Ce snippet doit être placé :

  • dans l'en-tête <> de votre HTML, ou
  • le plus tôt possible dans le fichier de présentation principal (pour React, Next.js, Vite, etc.).

Dans les applications à codage vibratoire, il s'agit généralement du modèle HTML principal, d'un composant de mise en page racine ou de tout autre fichier que l'IA utilise comme shell global de l'application.

Comment vérifier

Après le chargement de votre application :

  1. Ouvrez le navigateur DevTools
  2. Accéder à la console
  3. Exécuter : window.dataLayer

Si GTM est installé correctement, vous devriez voir un tableau (souvent avec au moins un objet à l'intérieur).

Vous pouvez également vérifier l'onglet Réseau et le confirmer :

  • gtm.js?id=GTM-XXXXXXX est en cours de chargement

Si les deux sont vrais, GTM est installé correctement, et votre application est maintenant prête à envoyer des événements via dataLayer.push().

Invite AI que vous pouvez copier-coller

Utilisez cette invite dans Cursor, Replit, v0, ou tout autre outil de codage de l'IA :

Add Google Tag Manager to this app.
Insert the official GTM snippet with container ID "GTM-XXXXXXX" into the main HTML / root layout so it loads on every page.
Do not modify the snippet logic.
Make sure it is added globally and not inside a single component.
After implementation, window.dataLayer should be available in the browser console.

Une fois que l'IA a appliqué la modification, vérifiez toujours manuellement à l'aide de la vérification de la console ci-dessus.

Étape 2 : Créer un module central d'événements de la couche de données (registre d'événements)

Dans une application basée sur l'IA, les différents composants poussent souvent les événements d'analyse de différentes manières. Cela conduit rapidement au chaos. L'approche la plus sûre consiste à centraliser tous les appels dataLayer.push() en un seul endroit. Ce "registre d'événements" agit comme une petite couche d'aide à l'analyse au sein de votre application. Il assure :

  • noms d'événements cohérents
  • structure cohérente de la charge utile
  • pas de doublons accidentels
  • pas de désordre SignUp vs sign_up vs signup_completed

Ceci est particulièrement important dans les applications à code vibratoire, où l'IA peut générer une logique similaire à plusieurs endroits sans s'en rendre compte.

Ce qu'il faut faire

Créez un module d'analyse réutilisable, par exemple :

  • analyticsEvents.js
  • tracking.js
  • events/analytics.js

Dans ce module, définissez une fonction par événement qui vous intéresse, par exemple :

  • pushSignUpEvent(userData)
  • pushLoginEvent(userData)
  • pushPurchaseEvent(orderData)
  • pushCTAEvent(détails)
  • pushErrorEvent(error)

Comment vérifier

Après la mise en œuvre du module :

  1. Déclencher l'un des événements de votre application
  2. Ouvrez la console du navigateur
  3. Exécution : dataLayer.slice(-1)[0]

Vous devriez voir le dernier événement poussé, par exemple : { event : "sign_up", user_id : "123", plan : "pro" }. Si vous voyez cela, votre registre d'événements fonctionne.

Invite AI que vous pouvez copier-coller

Utilisez cette invite pour générer le module à l'aide d'un outil de codage de l'IA :

Create a new JavaScript module called `analyticsEvents.js`.

Inside it, define functions that push events to `window.dataLayer`:

- pushSignUpEvent(user)

- pushLoginEvent(user)

- pushPurchaseEvent(order)

- pushCTAEvent(details)

- pushErrorEvent(error)

Each function should:

- ensure `window.dataLayer = window.dataLayer || []`

- call `window.dataLayer.push({...})`

- use a consistent `event` name (e.g. "sign_up", "login", "purchase")

- include only relevant, structured parameters

Do not push events directly elsewhere in the app.

This module should be the single source of truth for analytics events.

Une fois que l'IA a généré le fichier, vous contrôlez les analyses à partir d'un seul endroit, même si le reste de l'application change constamment.

Étape 3 : Déclencher des événements de la couche de données lors d'actions clés de l'utilisateur

Une fois votre module de push d'événements prêt, intégrez-le dans le flux de votre application. Cela signifie que vous devez appeler la fonction pushEvent appropriée chaque fois que l'action correspondante se produit. Par exemple :

  • après l'inscription réussie d'un utilisateur, appeler pushSignUpEvent avec les données du nouvel utilisateur
  • après une connexion, appelez pushLoginEvent
  • lorsqu'un achat est effectué, appeler pushPurchaseEvent avec les informations relatives à la transaction.

Chaque appel envoie un événement structuré dans la couche de données, qui sera pris en compte par le GTM.

Ce qu'il faut faire

Insérez ces appels à l'endroit du code où l'action est confirmée. Par exemple, dans un flux d'inscription, ne poussez l'événement sign_up qu'après :

  • réception d'une réponse positive du backend, ou
  • confirmant que la création du compte s'est réellement produite.

Cela permet de s'assurer que seuls les achèvements réels sont suivis et d'éviter les faux signaux.

Si votre application générée par l'IA gère le routage ou les changements de page, assurez-vous que l'événement est envoyé avant toute redirection ou transition de l'interface utilisateur qui pourrait décharger la page.

Faites attention aux doublons. Le code généré par l'IA peut parfois déclencher la même logique plusieurs fois. Assurez-vous que l'événement de connexion ne se déclenche qu'une seule fois par action de connexion. Si une fonction de connexion peut être exécutée plusieurs fois (par exemple lors de tentatives), ajoutez un garde ou un drapeau afin de ne pas déclencher plusieurs événements de connexion pour une seule action de l'utilisateur.

La couche de données doit représenter des événements réels et distincts, c'est-à-dire des actions de l'utilisateur, et non des bizarreries de mise en œuvre. Soyez également attentif aux redirections et aux rechargements. Si vous envoyez un événement et que vous naviguez immédiatement ailleurs, GTM n'aura peut-être pas le temps d'envoyer le hit.

Vous pouvez réduire ces risques en

  • retarder légèrement la navigation (par exemple 100-300 ms) après l'activation de l'événement, si l'interface utilisateur le permet
  • utiliser le comportement SPA (single page application) dans la mesure du possible pour éviter le rechargement complet de la page
  • dans les cas avancés, stocker temporairement l'événement (par exemple dans le stockage de la session) et l'afficher lors du chargement suivant de la page.

En général, vous devez déclencher les événements juste avant que l'interface utilisateur ne change et éviter de les déclencher trop tard ou trop tôt.

Comment vérifier

En utilisant votre application, effectuez une action de test telle qu'une inscription ou une connexion. Ensuite :

  1. Ouvrez le mode de prévisualisation du GTM (Tag Assistant)
  2. Déclencher l'action dans votre application
  3. Recherchez votre événement personnalisé sign_up ou login dans la ligne de temps de débogage.

Vous pouvez également ouvrir la console du navigateur et exécuter : console.log(dataLayer.map(item => item.event)). Vous devriez voir le nom de votre événement exactement une fois par action.

Invite AI que vous pouvez copier-coller

Utilisez cette invite pour mettre à jour la logique de votre application avec des déclencheurs d'événements :

Integrate analytics event tracking using the existing analytics event module.
Define and use a single canonical user identifier called user_id with the following rules:
- If the backend provides a user_id, use it.
- If no user_id exists, generate user_id by hashing the user’s email using SHA-256.
- The hashing must be deterministic and consistent across sessions.
- Never send raw email addresses to dataLayer.

Locate the exact points in the code where these actions are completed and add the corresponding event calls:

1. On successful user registration:
   - Ensure user_id exists using the rules above
   - Call pushSignUpEvent
   - Pass user_id

2. On successful user login:
   - Reuse the same user_id
   - Call pushLoginEvent
   - Pass user_id

3. On successful purchase or checkout completion:
   - Call pushPurchaseEvent
   - Pass order_id and total_amount
   - Include user_id if available

4. On click of the primary call-to-action button:
   - Call pushCTAEvent
   - Pass cta_name and page_name
   - Include user_id if available

5. On any application error (API failure or front-end runtime error):
   - Call pushErrorEvent
   - Pass error_type and error_message
   - Include user_id if available

Rules:
- Each event must be pushed exactly once per user action.
- Do not place event calls inside render loops, effects, or lifecycle hooks that can execute multiple times.
- Add guards where needed to prevent duplicate event pushes.
- Do not push events directly to window.dataLayer outside the analytics module.
- Do not rename event names or parameters.

Une fois que l'IA a appliqué les modifications, vérifiez manuellement que les événements se déclenchent exactement une fois et qu'ils apparaissent correctement dans l'aperçu GTM.

Étape 4 : Veiller à ce que les événements soient déclenchés de manière fiable

Il est essentiel que vos événements se déclenchent exactement une fois lorsque c'est prévu. Le code généré par l'IA peut accidentellement appeler une fonction deux fois, ou un composant peut se monter/démonter, provoquant des poussées répétées.

Ce qu'il faut faire

Pour éviter les doublons :

  • Utilisez des drapeaux ou l'état
    Si vous utilisez React ou similaire, assurez-vous que l'événement push n'est pas dans un composant qui rend plusieurs fois. Ou mettez un booléen comme window._signupTracked = true après le push, et vérifiez-le la prochaine fois.
  • Une poussée par action de l'utilisateur
    Code L'événement se déclenche à un point de la logique qui ne s'exécutera qu'une seule fois. Par exemple, lors du rappel de la réussite de la soumission d'un formulaire, et non à chaque rendu d'un composant "Succès".
  • Débondage des événements rapides
    Si un événement peut se succéder rapidement (par exemple, plusieurs clics sur un CTA), mettez en place un court délai de refroidissement (quelques secondes) afin de ne pas polluer la couche de données.

Testez un scénario tel qu'un utilisateur qui clique sur S'inscrire et qui est immédiatement redirigé, et confirmez que l'événement est pris en compte dans vos analyses via le mode de prévisualisation GTM.

Comment vérifier

Effectuez un test contrôlé pour chaque événement à forte valeur ajoutée :

  1. Ouvrez le mode de prévisualisation du GTM (Tag Assistant)
  2. Effectuez l'action une seule fois (inscription, connexion, achat, clic sur un CTA).
  3. Confirmez que l'événement apparaît exactement une fois dans la chronologie de l'événement.
  4. Confirmez que les balises prévues ne sont déclenchées qu'une seule fois pour cet événement.

Testez ensuite le cas le plus risqué :

  • déclencher un événement qui redirige immédiatement (succès de l'inscription → redirection)
  • confirmez que l'événement apparaît toujours dans l'aperçu GTM.

Si vous soupçonnez des doublons, ouvrez la console du navigateur et exécutez : dataLayer.filter(x => x && x.event).map(x => x.event). Vous ne devriez voir chaque nom d'événement qu'une seule fois par action au cours de votre test.

Invite AI que vous pouvez copier-coller

Audit the analytics implementation and fix reliability issues so events are not duplicated or lost.

Requirements:
- Every analytics event must fire exactly once per user action.
- No analytics event calls may exist inside render loops, effects, lifecycle hooks, or any code path that can run multiple times unintentionally.
- All analytics events must be fired via the analytics event module only. Do not push directly to window.dataLayer outside the module.

Tasks:
1. Identify every place where analytics events are triggered (signup, login, purchase, CTA click, error).
2. For each event, ensure it is called only after the action is confirmed successful (e.g., signup success response, login success response, purchase confirmation).
3. Add duplicate-prevention guards where needed:
   - Use a per-action in-memory flag that is scoped correctly (not global unless necessary).
   - For CTA clicks, implement a debounce or cooldown so multiple rapid clicks do not generate multiple events.
4. If any event is triggered immediately before navigation or redirect:
   - insert a short delay to allow GTM to process the event before the navigation occurs.

Verification additions (development only):
- Add temporary console logging immediately before each analytics event call showing event name and a unique action identifier.
- Ensure logs can be removed cleanly after verification.

Output:
- Provide a summary of what you changed and where (file names and functions).
- Ensure the app behavior is unchanged aside from analytics reliability improvements.

Utilisez les journaux de la console en développement pour retracer les appels. N'oubliez pas de les supprimer ou de les désactiver en production.

Étape 5 : Transmettre les événements du client au conteneur côté serveur TAGGRS

Avec une installation GTM robuste côté client, vous pouvez maintenant acheminer ces événements vers un conteneur GTM côté serveur à l'aide de TAGGRS. L'idée est que votre GTM web (client) envoie des événements à un point de terminaison dans le nuage où un conteneur de serveur TAGGRS les traite.

Cela permet d'améliorer la précision des données (par exemple, en ce qui concerne les restrictions liées aux cookies des navigateurs, les bloqueurs de publicité, etc.

Ce qu'il faut faire

Le conteneur côté serveur ne recevra pas les événements comme par magie. Vous devez configurer votre client GTM pour qu'il les transmette.

Si vous utilisez Google Analytics 4, modifiez votre balise GA4 Configuration dans GTM. Définissez server_container_url à l'adresse du serveur TAGGRS fournie pour votre conteneur. Cela permet de diriger les visites de GA4 vers l'URL du conteneur de serveur au lieu de les diriger directement vers les points de terminaison de Google.

Ensuite, créez un déclencheur d'événement personnalisé pour .* (correspond à chaque événement), puis ajoutez une nouvelle balise en utilisant la balise GA4 avec l'URL du serveur. Attachez le déclencheur à cette balise afin que chaque événement(inscription, connexion, achat, etc.) soit transmis au conteneur du serveur.

Cela garantit que votre conteneur côté serveur reçoit les mêmes événements pour les traiter et les transmettre à des outils tels que GA4, Facebook Conversions API, etc.

Ensuite, configurez votre conteneur côté serveur de manière à ce qu'il transmette correctement ces événements à votre système d'analyse.

En savoir plus sur la configuration de base de votre conteneur côté serveur.

Comment vérifier

Une fois cela fait, vérifiez que les événements arrivent bien côté serveur. Dans l'aperçu du conteneur de serveur de GTM, vous devriez voir des événements entrants lorsque vous déclenchez des actions dans votre application. La structure doit correspondre à ce que vous avez poussé depuis le client (puisque nous l'avons gardé cohérente).

Utilisez un test contrôlé :

  1. Ouvrez votre application et GTM Preview pour le conteneur web
  2. Déclencher un événement (par exemple, sign_up ou login)
  3. Ouvrez l'aperçu du conteneur de serveur
  4. Confirmez que l'événement arrive côté serveur avec le nom et les paramètres attendus.

Si la prévisualisation web affiche l'événement mais pas la prévisualisation serveur, cela signifie que la configuration de la redirection n'est pas correcte. N'oubliez pas de publier votre conteneur GTM après avoir effectué ces modifications.

Événements à forte valeur ajoutée à mettre en œuvre en premier

Pour les applications à code vibratoire, en particulier les produits en phase de démarrage, concentrez-vous sur un petit nombre d'événements à forte valeur ajoutée qui donnent un aperçu clair du comportement de l'utilisateur et de l'état de l'entonnoir. Ces événements couvrent l'ensemble du parcours, de la première interaction à la conversion et aux points d'échec.

sign_upDéclenché lorsqu'un utilisateur s'inscrit ou crée un compte.
Ceci mesure la conversion des nouveaux utilisateurs et l'efficacité de l'onboarding.
Le cas échéant, vous pouvez passer des paramètres supplémentaires tels que la méthode d'inscription (email haché, login social) ou le type de plan.
loginDéclenché lors de la connexion de l'utilisateur. Utile pour distinguer les utilisateurs actifs des visiteurs occasionnels et pour repérer les problèmes de fréquence de connexion ou d'authentification.
cta_clickDéclenché lorsqu'un utilisateur clique sur un bouton d'appel à l'action important, tel que " Démarrer " ou " S'abonner". Cela montre l'engagement avec des invites clés dans votre interface utilisateur. Les paramètres courants sont le nom de l'action (cta_name) et le nom de la page (page_name).
purchaseDéclenché lors d'un achat ou d'une mise à niveau réussie. Pour les SaaS, il peut s'agir d'un abonnement payant ; pour les applications, d'un achat in-app.
Incluez des détails tels que l'identifiant de la transaction, la valeur, la devise et le nom du produit ou du plan.
Cet événement est essentiel pour le suivi des revenus et doit, dans la mesure du possible, s'aligner sur la structure des événements d'achat du GA4.
erreurDéclenché lorsqu'une erreur importante se produit, comme l'échec de la soumission d'un formulaire, l'échec d'un paiement ou une erreur d'exécution frontale.
Bien qu'il ne s'agisse pas d'un événement de conversion, le suivi des erreurs permet d'identifier les points de friction et les problèmes de stabilité. Les paramètres typiques comprennent error_type et error_message.

À l'exception de ces derniers, n'oubliez pas d'implémenter un événement page_view de base dans l'interface utilisateur de votre conteneur GTM côté client. Vous pouvez le faire en configurant simplement un nouvel événement : page_view avec le déclencheur Initialisation - Toutes les pages disponible par défaut dans le GTM. Vous n'avez pas besoin d'un événement dataLayer séparé pour celui-ci.

Pourquoi cet ensemble est-il suffisant au départ ?

La mise en œuvre précoce de ces événements vous permet de disposer d'une base de référence fiable pour le parcours de l'utilisateur :

  • le nombre de visites et d'utilisateurs que votre application enregistre
  • combien d'utilisateurs se sont inscrits avec succès
  • combien de personnes reviennent et se connectent
  • la fréquence des clics sur les principaux CTA
  • si les achats sont effectués avec succès
  • où les erreurs interrompent le flux.

Du point de vue du marketing et de l'analyse, cette structure facilite également la définition des conversions. Par exemple, vous pouvez marquer l'inscription ou l'achat comme des conversions (événements clés) dans Google Analytics sans avoir à retravailler votre suivi par la suite.

Brève conclusion

Les applications codées par Vibe évoluent rapidement, mais les analyses ne doivent pas être négligées.

En installant correctement le GTM, en centralisant tous les événements de la couche de données, en ne déclenchant des événements qu'aux points d'action confirmés, en évitant les doublons et les occurrences manquées, et en transmettant les événements au côté serveur de TAGGRS, vous obtenez une configuration de suivi qui résiste aux changements de code de l'IA et qui est prête pour des analyses de niveau production. L'idée principale est simple : garder la logique de suivi prévisible et centralisée afin que vous puissiez évoluer rapidement avec votre produit, en prenant des décisions commerciales basées sur des données, et pas seulement sur votre intuition.

FAQ

Puis-je utiliser le GA4 directement dans une application à code vibratoire ?

Oui, vous pouvez utiliser GA4 directement, mais il est fragile dans les applications codées par vibration. Les codes générés par l'IA changent souvent de structure, redessinent les composants de manière inattendue ou dupliquent la logique. Les appels directs au GA4(gtag() ou les appels au SDK dispersés dans l'application) sont faciles à casser ou à dupliquer. L'utilisation de GTM avec une couche de données centralisée vous donne une abstraction stable qui survit aux remaniements et aux régénérations.

Pourquoi mon suivi s'interrompt-il après la régénération du code ?

Parce que la logique analytique est souvent mélangée à l'interface utilisateur ou à la logique commerciale. Lorsque vous régénérez des parties de l'application, l'IA peut renommer des fonctions, déplacer des composants, dupliquer des effets ou supprimer du code "inutilisé" dont elle ne comprend pas qu'il s'agit d'analyse. Si le suivi est centralisé dans un module d'événement dataLayer et que le GTM est injecté globalement, la régénération est beaucoup moins susceptible d'interrompre vos analyses.

Ai-je besoin d'un suivi côté serveur pour un MVP ?

Pas strictement, mais c'est fortement recommandé. Pour les MVP, les risques les plus importants sont les événements manquants dus aux bloqueurs de publicité, une logique client incohérente et une mauvaise qualité des données due à des frontaux instables. Le suivi côté serveur devient précieux très tôt car il améliore la fiabilité sans nécessiter plus de complexité au niveau du frontend. Si vous utilisez déjà correctement GTM, l'ajout ultérieur du suivi côté serveur est une mise à niveau à moindre effort.

Quelle est l'utilité du TAGGRS par rapport à une installation directe du GA4 ?

Une installation directe de GA4 dépend entièrement du comportement correct du client. TAGGRS ajoute une couche GTM côté serveur qui :

  • reçoit des événements de votre installation GTM,
  • les transmet de manière fiable au GA4 et à d'autres plates-formes,
  • réduit la perte de données due aux bloqueurs de publicité et aux restrictions imposées par les navigateurs,
  • et maintient le suivi stable même lorsque le code du frontend change.

Dans les applications à codage vibratoire, où la logique frontale est souvent imprévisible, cette couche supplémentaire rend les analyses beaucoup plus fiables.

Le suivi côté serveur ralentira-t-il mon application ?

Non, dans la plupart des cas, il améliore les performances. Avec le suivi côté serveur, le navigateur envoie moins de demandes à des tiers. Au lieu de lancer plusieurs scripts d'analyse, le client envoie une seule demande à votre conteneur côté serveur, qui transmet ensuite les données de serveur à serveur. Nous avons rédigé un guide sur l'effet du suivi côté serveur sur la vitesse de votre site web.

TAGGRS peut-il fonctionner avec n'importe quelle application générée par l'IA ?

Oui, TAGGRS ne se soucie pas de la façon dont votre application a été construite. Il fonctionne avec les applications générées par Cursor, Replit, v0, les constructeurs basés sur GPT, les applications codées à la main et les configurations hybrides. Tant que votre application charge correctement le GTM et envoie des événements structurés via dataLayer.push(), TAGGRS peut traiter ces événements côté serveur. C'est pourquoi la configuration de la couche de données côté client décrite dans ce guide constitue la base essentielle.


À propos de l'auteur

Récemment publié

magnifiercrossmenu linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram