Files
cv-site/templates/partials/layout/head-structured-data.html
T
juanatsap 7b6062d0f2 privacy: remove phone number from CV — private data
- Clear phone field in both EN/ES JSON data
- Conditional rendering in footer, plain text, and JSON-LD
- Chat agent already configured to not reveal contact details
2026-04-09 20:20:15 +01:00

212 lines
6.0 KiB
HTML

{{define "head-structured-data"}}
<!-- Structured Data (JSON-LD) - Enhanced for AI-era SEO -->
<!-- Person Schema -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Person",
"@id": "{{.CV.Personal.Website}}/#person",
"name": "{{.CV.Personal.Name}}",
"givenName": "{{.CV.Personal.FirstName}}",
"familyName": "{{.CV.Personal.LastName}}",
"jobTitle": "{{.CV.Personal.Title}}",
"description": "{{.CV.Summary}}",
"url": "{{.CV.Personal.Website}}",
"image": "{{.CV.Personal.Website}}/static/images/profile.jpg",
"email": "{{.CV.Personal.Email}}",{{if .CV.Personal.Phone}}
"telephone": "{{.CV.Personal.Phone}}",{{end}}
"birthDate": "{{.CV.Personal.DateOfBirth}}",
"birthPlace": {
"@type": "Place",
"name": "{{.CV.Personal.PlaceOfBirth}}"
},
"nationality": {
"@type": "Country",
"name": "{{.CV.Personal.Citizenship}}"
},
"address": {
"@type": "PostalAddress",
"addressLocality": "{{.CV.Personal.Location}}",
"addressCountry": "ES"
},
"sameAs": [
"{{.CV.Personal.LinkedIn}}",
"{{.CV.Personal.GitHub}}",
"{{.CV.Personal.Domestika}}"
],
"alumniOf": {
"@type": "CollegeOrUniversity",
"name": "Universidad de Extremadura",
"address": {
"@type": "PostalAddress",
"addressLocality": "Cáceres",
"addressCountry": "ES"
}
},
"knowsAbout": [
"Web Development",
"SAP Customer Data Cloud",
"React",
"Node.js",
"Go",
"HTMX",
"AI-Assisted Development",
"Full Stack Development",
"Authentication Systems",
"GDPR Compliance",
"Identity Management"
],
"knowsLanguage": [
{
"@type": "Language",
"name": "Spanish",
"alternateName": "es"
},
{
"@type": "Language",
"name": "English",
"alternateName": "en"
},
{
"@type": "Language",
"name": "Portuguese",
"alternateName": "pt"
}
],
"worksFor": [
{
"@type": "Organization",
"name": "Olympic Broadcasting Services",
"url": "https://www.obs.tv/"
},
{
"@type": "Organization",
"name": "LIV Golf",
"url": "https://www.livgolf.com/"
}
],
"hasOccupation": [
{{- range $i, $exp := .CV.Experience}}{{if $i}},{{end}}
{
"@type": "Occupation",
"name": "{{$exp.Position}}",
"occupationLocation": {
"@type": "Place",
"name": "{{$exp.Location}}"
},
"description": "{{$exp.ShortDescription}}",
"skills": "{{range $j, $tech := $exp.Technologies}}{{if $j}}, {{end}}{{$tech}}{{end}}"
}
{{- end}}
]
}
</script>
<!-- WebSite Schema -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"@id": "{{.CV.Personal.Website}}/#website",
"name": "{{.CV.Personal.Name}} - Professional CV",
"url": "{{.CV.Personal.Website}}",
"description": "Interactive curriculum vitae of {{.CV.Personal.Name}}, {{.CV.Personal.Title}}",
"inLanguage": ["en", "es"],
"author": {
"@id": "{{.CV.Personal.Website}}/#person"
},
"potentialAction": {
"@type": "SearchAction",
"target": "{{.CV.Personal.Website}}/?lang={search_term_string}",
"query-input": "required name=search_term_string"
}
}
</script>
<!-- BreadcrumbList Schema -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "{{.CV.Personal.Website}}"
},
{
"@type": "ListItem",
"position": 2,
"name": "CV {{if eq .Lang "es"}}(Español){{else}}(English){{end}}",
"item": "{{.CV.Personal.Website}}/?lang={{.Lang}}"
}
]
}
</script>
<!-- ProfilePage Schema (for CV/Resume) -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ProfilePage",
"mainEntity": {
"@id": "{{.CV.Personal.Website}}/#person"
},
"dateCreated": "2024-01-01",
"dateModified": "{{.CV.Meta.LastUpdated}}",
"name": "{{.CV.Personal.Name}} - Curriculum Vitae",
"description": "{{.CV.SEO.MetaDescription}}",
"inLanguage": "{{.Lang}}"
}
</script>
<!-- EducationalOccupationalCredential Schema -->
{{range .CV.Education}}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "EducationalOccupationalCredential",
"name": "{{.Degree}}",
"description": "{{.Field}}",
"educationalLevel": "Bachelor's Degree",
"credentialCategory": "degree",
"recognizedBy": {
"@type": "CollegeOrUniversity",
"name": "{{.Institution}}",
"address": {
"@type": "PostalAddress",
"addressLocality": "{{.Location}}"
}
},
"dateCreated": "{{.EndDate}}"
}
</script>
{{end}}
<!-- Course Schemas -->
{{range .CV.Courses}}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Course",
"name": "{{.Title}}",
"description": "{{if .ShortDescription}}{{.ShortDescription}}{{else}}{{.Description}}{{end}}",
"provider": {
"@type": "Organization",
"name": "{{.Institution}}"
},
"hasCourseInstance": {
"@type": "CourseInstance",
"courseMode": "onsite",
"location": {
"@type": "Place",
"name": "{{.Location}}"
}
},
"timeRequired": "{{.Duration}}"
}
</script>
{{end}}
{{end}}