diff --git a/Dockerfile b/Dockerfile
index 77878032f93b50f9ddd6b35102857a8072556388..aab9e4e9675acc136098e13cd8ff08cb45214e1f 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,15 +1,12 @@
 FROM golang:alpine as go_builder
 
-RUN apk add --no-cache curl
-RUN curl https://glide.sh/get | sh
-
-WORKDIR /go/src/app
-COPY glide.* ./
-RUN glide install
+WORKDIR /src
+COPY go.* ./
+RUN go mod download
 COPY *.go ./
-RUN CGO_ENABLED=0 GOOS=linux go build -a app .
+RUN CGO_ENABLED=0 GOOS=linux go build -o app .
 
 FROM scratch
 COPY --from=go_builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
-COPY --from=go_builder /go/src/app/app /app
-ENTRYPOINT ["/app"]
\ No newline at end of file
+COPY --from=go_builder /src/app /app
+ENTRYPOINT ["/app"]
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..1949a53a90813eeb4dd4499fcd0ca9d00aa2a68c
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,14 @@
+IMAGE := k8r.eu/justjanne/$(shell basename $(shell git remote get-url origin) .git)
+TAGS := $(shell git describe --always --tags HEAD)
+
+.PHONY: build
+build:
+	docker build --pull -t $(IMAGE):$(TAGS) .
+	docker tag $(IMAGE):$(TAGS) $(IMAGE):latest
+	@echo Successfully tagged $(IMAGE):$(TAGS) as latest
+
+.PHONY: push
+push: build
+	docker push $(IMAGE):$(TAGS)
+	docker push $(IMAGE):latest
+	@echo Successfully pushed $(IMAGE):$(TAGS) as latest
diff --git a/build.sh b/build.sh
deleted file mode 100755
index d96811f2e8858ed305a9c3413b1451aa520f6701..0000000000000000000000000000000000000000
--- a/build.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-IMAGE=k8r.eu/justjanne/embed-helper
-TAGS=$(git describe --always --tags HEAD)
-
-docker build -t $IMAGE:$TAGS .
-docker tag $IMAGE:$TAGS $IMAGE:latest
-echo Successfully tagged $IMAGE:latest
-docker push $IMAGE:$TAGS
-docker push $IMAGE:latest
diff --git a/deploy.sh b/deploy.sh
deleted file mode 100755
index dfbb00486baecac3c264cd77b5f9408539e0ffb1..0000000000000000000000000000000000000000
--- a/deploy.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-IMAGE=k8r.eu/justjanne/embed-helper
-TAGS=$(git describe --always --tags HEAD)
-DEPLOYMENT=embed-helper
-POD=embed-helper
-
-kubectl set image deployment/$DEPLOYMENT $POD=$IMAGE:$TAGS
diff --git a/glide.lock b/glide.lock
deleted file mode 100644
index 6afde7f907e2721d806994b0d5204b7f7643480c..0000000000000000000000000000000000000000
--- a/glide.lock
+++ /dev/null
@@ -1,48 +0,0 @@
-hash: 580579292d28074fd3d1d1dc8839c97e8dad3795380023d934db98c6e8d47158
-updated: 2019-02-04T17:02:06.067158062+01:00
-imports:
-- name: github.com/andybalholm/cascadia
-  version: 680b6a57bda4f657485ad44bdea42342ead737bc
-- name: github.com/dyatlov/go-htmlinfo
-  version: d9417c75de65fbae5b16f4038b421c9e1cc61f0d
-  subpackages:
-  - htmlinfo
-- name: github.com/dyatlov/go-oembed
-  version: 4bc5ab7a42e91e45e957f9b0c47f911efed16710
-  subpackages:
-  - oembed
-- name: github.com/dyatlov/go-opengraph
-  version: 816b6608b3c8c1e871bc9cf777f390e2532081fe
-  subpackages:
-  - opengraph
-- name: github.com/dyatlov/go-readability
-  version: e7b2080f87f824caa519ed33dac6d4e4e413616d
-- name: github.com/Jeffail/gabs
-  version: 7a0fed31069aba77993a518cc2f37b28ee7aa883
-- name: github.com/PuerkitoBio/goquery
-  version: 3dcf72e6c17f694381a21592651ca1464ded0e10
-- name: golang.org/x/net
-  version: bc3663df0ac92f928d419e31e0d2af22e683a5a2
-  subpackages:
-  - html
-  - html/atom
-  - html/charset
-- name: golang.org/x/text
-  version: f28f36722d5ef2f9655ad3de1f248e3e52ad5ebd
-  subpackages:
-  - encoding
-  - encoding/charmap
-  - encoding/htmlindex
-  - encoding/internal
-  - encoding/internal/identifier
-  - encoding/japanese
-  - encoding/korean
-  - encoding/simplifiedchinese
-  - encoding/traditionalchinese
-  - encoding/unicode
-  - internal/tag
-  - internal/utf8internal
-  - language
-  - runes
-  - transform
-testImports: []
diff --git a/glide.yaml b/glide.yaml
deleted file mode 100644
index 94b53616354e18a0406d45459e54a29e66c5b57a..0000000000000000000000000000000000000000
--- a/glide.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-package: git.kuschku.de/justjanne/embed-helper
-import:
-- package: github.com/dyatlov/go-htmlinfo/htmlinfo
\ No newline at end of file
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000000000000000000000000000000000000..bfee6403f20992b7b57abd4045a4fe01f81a31ac
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,5 @@
+module git.kuschku.de/justjanne/embed-helper
+
+go 1.13
+
+require golang.org/x/net v0.0.0-20160621215608-bc3663df0ac9
diff --git a/main.go b/main.go
index a0f411afa93575dbe6c0e4543211c113a4d4b6c5..1055c6c48423967d73bded55c4092b9a8cf10b0a 100644
--- a/main.go
+++ b/main.go
@@ -136,6 +136,7 @@ type DataField struct {
 }
 
 type Data struct {
+	FromUrl     string      `json:"from_url"`
 	Color       string      `json:"color"`
 	AuthorName  string      `json:"author_name"`
 	AuthorLink  string      `json:"author_link"`
@@ -147,7 +148,7 @@ type Data struct {
 	ImageUrl    string      `json:"image_url"`
 	Type        string      `json:"type"`
 	Player      string      `json:"player"`
-	Service     string      `json:"service"`
+	ServiceName string      `json:"service_name"`
 	ServiceIcon string      `json:"service_icon"`
 	Ts          int         `json:"ts"`
 }
@@ -200,6 +201,7 @@ func resolve(base *url.URL, path string) string {
 
 func buildData(in InternalData, oEmbed OEmbed, providerFallbacks []func(*InternalData)) (out Data) {
 	out = Data{}
+	out.FromUrl = in.url.String()
 	out.TitleLink = in.url.String()
 	out.Title = coalesce([]string{in.twitterTitle, in.ogTitle, in.metaTitle, in.title})
 	out.Text = coalesce([]string{in.twitterDescription, in.ogDescription, in.metaDescription})
@@ -208,9 +210,9 @@ func buildData(in InternalData, oEmbed OEmbed, providerFallbacks []func(*Interna
 
 	for _, fallback := range providerFallbacks {
 		out.Color = coalesce([]string{in.metaThemeColor, in.urlProviderMetaThemeColor})
-		out.Service = coalesce([]string{oEmbed.ProviderName, in.ogSiteName, in.urlProviderOgSiteName, in.urlProviderMetaTitle, in.urlProviderTitle})
+		out.ServiceName = coalesce([]string{oEmbed.ProviderName, in.ogSiteName, in.urlProviderOgSiteName, in.urlProviderMetaTitle, in.urlProviderTitle})
 		out.ServiceIcon = resolve(in.url, coalesce([]string{in.linkFavicon, in.urlProviderLinkFavicon, in.urlProviderIconPng, in.urlProviderIconIco}))
-		if out.Service != "" && out.ServiceIcon != "" {
+		if out.ServiceName != "" && out.ServiceIcon != "" {
 			break
 		}
 		fallback(&in)
@@ -283,234 +285,378 @@ func main() {
 
 	matchers := map[string]func(*InternalData, string, string){}
 	matchers["meta/twitter:card"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterCard = content
+		if internalData.twitterCard == "" {
+            internalData.twitterCard = content
+        }
 	}
 	matchers["meta/twitter:site"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterSite = content
+		if internalData.twitterSite == "" {
+            internalData.twitterSite = content
+        }
 	}
 	matchers["meta/twitter:site:id"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterSiteId = content
+		if internalData.twitterSiteId == "" {
+            internalData.twitterSiteId = content
+        }
 	}
 	matchers["meta/twitter:creator"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterCreator = content
+		if internalData.twitterCreator == "" {
+            internalData.twitterCreator = content
+        }
 	}
 	matchers["meta/twitter:creator:id"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterCreatorId = content
+		if internalData.twitterCreatorId == "" {
+            internalData.twitterCreatorId = content
+        }
 	}
 	matchers["meta/twitter:description"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterDescription = content
+		if internalData.twitterDescription == "" {
+            internalData.twitterDescription = content
+        }
 	}
 	matchers["meta/twitter:title"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterTitle = content
+		if internalData.twitterTitle == "" {
+            internalData.twitterTitle = content
+        }
 	}
 	matchers["meta/twitter:image"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterImage = content
+		if internalData.twitterImage == "" {
+            internalData.twitterImage = content
+        }
 	}
 	matchers["meta/twitter:image:src"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterImage = content
+		if internalData.twitterImage == "" {
+            internalData.twitterImage = content
+        }
 	}
 	matchers["meta/twitter:image:alt"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterImageAlt = content
+		if internalData.twitterImageAlt == "" {
+            internalData.twitterImageAlt = content
+        }
 	}
 	matchers["meta/twitter:player"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterPlayer = content
+		if internalData.twitterPlayer == "" {
+            internalData.twitterPlayer = content
+        }
 	}
 	matchers["meta/twitter:player:width"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterPlayerWidth = content
+		if internalData.twitterPlayerWidth == "" {
+            internalData.twitterPlayerWidth = content
+        }
 	}
 	matchers["meta/twitter:player:height"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterPlayerHeight = content
+		if internalData.twitterPlayerHeight == "" {
+            internalData.twitterPlayerHeight = content
+        }
 	}
 	matchers["meta/twitter:player:stream"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterPlayerStream = content
+		if internalData.twitterPlayerStream == "" {
+            internalData.twitterPlayerStream = content
+        }
 	}
 	matchers["meta/twitter:app:name:iphone"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterAppNameIphone = content
+		if internalData.twitterAppNameIphone == "" {
+            internalData.twitterAppNameIphone = content
+        }
 	}
 	matchers["meta/twitter:app:id:iphone"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterAppIdIphone = content
+		if internalData.twitterAppIdIphone == "" {
+            internalData.twitterAppIdIphone = content
+        }
 	}
 	matchers["meta/twitter:app:url:iphone"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterAppUrlIphone = content
+		if internalData.twitterAppUrlIphone == "" {
+            internalData.twitterAppUrlIphone = content
+        }
 	}
 	matchers["meta/twitter:app:name:ipad"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterAppNameIpad = content
+		if internalData.twitterAppNameIpad == "" {
+            internalData.twitterAppNameIpad = content
+        }
 	}
 	matchers["meta/twitter:app:id:ipad"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterAppIdIpad = content
+		if internalData.twitterAppIdIpad == "" {
+            internalData.twitterAppIdIpad = content
+        }
 	}
 	matchers["meta/twitter:app:url:ipad"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterAppUrlIpad = content
+		if internalData.twitterAppUrlIpad == "" {
+            internalData.twitterAppUrlIpad = content
+        }
 	}
 	matchers["meta/twitter:app:name:googleplay"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterAppNameGoogleplay = content
+		if internalData.twitterAppNameGoogleplay == "" {
+            internalData.twitterAppNameGoogleplay = content
+        }
 	}
 	matchers["meta/twitter:app:id:googleplay"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterAppIdGoogleplay = content
+		if internalData.twitterAppIdGoogleplay == "" {
+            internalData.twitterAppIdGoogleplay = content
+        }
 	}
 	matchers["meta/twitter:app:url:googleplay"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterAppUrlGoogleplay = content
+		if internalData.twitterAppUrlGoogleplay == "" {
+            internalData.twitterAppUrlGoogleplay = content
+        }
 	}
 	matchers["meta/twitter:label1"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterLabel1 = content
+		if internalData.twitterLabel1 == "" {
+            internalData.twitterLabel1 = content
+        }
 	}
 	matchers["meta/twitter:data1"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterData1 = content
+		if internalData.twitterData1 == "" {
+            internalData.twitterData1 = content
+        }
 	}
 	matchers["meta/twitter:label2"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterLabel2 = content
+		if internalData.twitterLabel2 == "" {
+            internalData.twitterLabel2 = content
+        }
 	}
 	matchers["meta/twitter:data2"] = func(internalData *InternalData, content string, extra string) {
-		internalData.twitterData2 = content
+		if internalData.twitterData2 == "" {
+            internalData.twitterData2 = content
+        }
 	}
 
 	matchers["meta/og:url"] = func(internalData *InternalData, content string, extra string) {
-		internalData.ogUrl = content
+		if internalData.ogUrl == "" {
+            internalData.ogUrl = content
+        }
 	}
 	matchers["meta/og:title"] = func(internalData *InternalData, content string, extra string) {
-		internalData.ogTitle = content
+		if internalData.ogTitle == "" {
+            internalData.ogTitle = content
+        }
 	}
 	matchers["meta/og:description"] = func(internalData *InternalData, content string, extra string) {
-		internalData.ogDescription = content
+		if internalData.ogDescription == "" {
+            internalData.ogDescription = content
+        }
 	}
 	matchers["meta/og:type"] = func(internalData *InternalData, content string, extra string) {
-		internalData.ogType = content
+		if internalData.ogType == "" {
+            internalData.ogType = content
+        }
 	}
 	matchers["meta/og:locale"] = func(internalData *InternalData, content string, extra string) {
-		internalData.ogLocale = content
+		if internalData.ogLocale == "" {
+            internalData.ogLocale = content
+        }
 	}
 
 	matchers["meta/og:video"] = func(internalData *InternalData, content string, extra string) {
-		internalData.ogVideo = content
+		if internalData.ogVideo == "" {
+            internalData.ogVideo = content
+        }
 	}
 	matchers["meta/og:video:url"] = func(internalData *InternalData, content string, extra string) {
-		internalData.ogVideoUrl = content
+		if internalData.ogVideoUrl == "" {
+            internalData.ogVideoUrl = content
+        }
 	}
 	matchers["meta/og:video:secure_url"] = func(internalData *InternalData, content string, extra string) {
-		internalData.ogVideoSecureUrl = content
+		if internalData.ogVideoSecureUrl == "" {
+            internalData.ogVideoSecureUrl = content
+        }
 	}
 	matchers["meta/og:video:type"] = func(internalData *InternalData, content string, extra string) {
-		internalData.ogVideoType = content
+		if internalData.ogVideoType == "" {
+            internalData.ogVideoType = content
+        }
 	}
 	matchers["meta/og:video:width"] = func(internalData *InternalData, content string, extra string) {
-		internalData.ogVideoWidth = content
+		if internalData.ogVideoWidth == "" {
+            internalData.ogVideoWidth = content
+        }
 	}
 	matchers["meta/og:video:height"] = func(internalData *InternalData, content string, extra string) {
-		internalData.ogVideoHeight = content
+		if internalData.ogVideoHeight == "" {
+            internalData.ogVideoHeight = content
+        }
 	}
 
 	matchers["meta/og:image"] = func(internalData *InternalData, content string, extra string) {
-		internalData.ogImage = content
+		if internalData.ogImage == "" {
+            internalData.ogImage = content
+        }
 	}
 	matchers["meta/og:image:url"] = func(internalData *InternalData, content string, extra string) {
-		internalData.ogImageUrl = content
+		if internalData.ogImageUrl == "" {
+            internalData.ogImageUrl = content
+        }
 	}
 	matchers["meta/og:image:secure_url"] = func(internalData *InternalData, content string, extra string) {
-		internalData.ogImageSecureUrl = content
+		if internalData.ogImageSecureUrl == "" {
+            internalData.ogImageSecureUrl = content
+        }
 	}
 	matchers["meta/og:image:type"] = func(internalData *InternalData, content string, extra string) {
-		internalData.ogImageType = content
+		if internalData.ogImageType == "" {
+            internalData.ogImageType = content
+        }
 	}
 	matchers["meta/og:image:width"] = func(internalData *InternalData, content string, extra string) {
-		internalData.ogImageWidth = content
+		if internalData.ogImageWidth == "" {
+            internalData.ogImageWidth = content
+        }
 	}
 	matchers["meta/og:image:height"] = func(internalData *InternalData, content string, extra string) {
-		internalData.ogImageHeight = content
+		if internalData.ogImageHeight == "" {
+            internalData.ogImageHeight = content
+        }
 	}
 
 	matchers["meta/og:audio"] = func(internalData *InternalData, content string, extra string) {
-		internalData.ogAudio = content
+		if internalData.ogAudio == "" {
+            internalData.ogAudio = content
+        }
 	}
 	matchers["meta/og:audio:url"] = func(internalData *InternalData, content string, extra string) {
-		internalData.ogAudioUrl = content
+		if internalData.ogAudioUrl == "" {
+            internalData.ogAudioUrl = content
+        }
 	}
 	matchers["meta/og:audio:secure_url"] = func(internalData *InternalData, content string, extra string) {
-		internalData.ogAudioSecureUrl = content
+		if internalData.ogAudioSecureUrl == "" {
+            internalData.ogAudioSecureUrl = content
+        }
 	}
 	matchers["meta/og:audio:type"] = func(internalData *InternalData, content string, extra string) {
-		internalData.ogAudioType = content
+		if internalData.ogAudioType == "" {
+            internalData.ogAudioType = content
+        }
 	}
 
 	matchers["meta/og:site_name"] = func(internalData *InternalData, content string, extra string) {
-		internalData.ogSiteName = content
+		if internalData.ogSiteName == "" {
+            internalData.ogSiteName = content
+        }
 	}
 
 	matchers["meta/article:author"] = func(internalData *InternalData, content string, extra string) {
-		internalData.articleAuthor = content
+		if internalData.articleAuthor == "" {
+            internalData.articleAuthor = content
+        }
 	}
 	matchers["meta/article:publisher"] = func(internalData *InternalData, content string, extra string) {
-		internalData.articlePublisher = content
+		if internalData.articlePublisher == "" {
+            internalData.articlePublisher = content
+        }
 	}
 	matchers["meta/article:published_time"] = func(internalData *InternalData, content string, extra string) {
-		internalData.articlePublishedTime = content
+		if internalData.articlePublishedTime == "" {
+            internalData.articlePublishedTime = content
+        }
 	}
 
 	matchers["meta/soundcloud:user"] = func(internalData *InternalData, content string, extra string) {
-		internalData.soundcloudUser = content
+		if internalData.soundcloudUser == "" {
+            internalData.soundcloudUser = content
+        }
 	}
 	matchers["meta/soundcloud:play_count"] = func(internalData *InternalData, content string, extra string) {
-		internalData.soundcloudPlayCount = content
+		if internalData.soundcloudPlayCount == "" {
+            internalData.soundcloudPlayCount = content
+        }
 	}
 	matchers["meta/soundcloud:download_count"] = func(internalData *InternalData, content string, extra string) {
-		internalData.soundcloudDownloadCount = content
+		if internalData.soundcloudDownloadCount == "" {
+            internalData.soundcloudDownloadCount = content
+        }
 	}
 	matchers["meta/soundcloud:comments_count"] = func(internalData *InternalData, content string, extra string) {
-		internalData.soundcloudCommentsCount = content
+		if internalData.soundcloudCommentsCount == "" {
+            internalData.soundcloudCommentsCount = content
+        }
 	}
 	matchers["meta/soundcloud:like_count"] = func(internalData *InternalData, content string, extra string) {
-		internalData.soundcloudLikeCount = content
+		if internalData.soundcloudLikeCount == "" {
+            internalData.soundcloudLikeCount = content
+        }
 	}
 	matchers["meta/soundcloud:sound_count"] = func(internalData *InternalData, content string, extra string) {
-		internalData.soundcloudSoundCount = content
+		if internalData.soundcloudSoundCount == "" {
+            internalData.soundcloudSoundCount = content
+        }
 	}
 	matchers["meta/soundcloud:follower_count"] = func(internalData *InternalData, content string, extra string) {
-		internalData.soundcloudFollowerCount = content
+		if internalData.soundcloudFollowerCount == "" {
+            internalData.soundcloudFollowerCount = content
+        }
 	}
 
 	matchers["meta/title"] = func(internalData *InternalData, content string, extra string) {
-		internalData.metaTitle = content
+		if internalData.metaTitle == "" {
+            internalData.metaTitle = content
+        }
 	}
 	matchers["meta/description"] = func(internalData *InternalData, content string, extra string) {
-		internalData.metaDescription = content
+		if internalData.metaDescription == "" {
+            internalData.metaDescription = content
+        }
 	}
 	matchers["meta/author"] = func(internalData *InternalData, content string, extra string) {
-		internalData.metaAuthor = content
+		if internalData.metaAuthor == "" {
+            internalData.metaAuthor = content
+        }
 	}
 	matchers["meta/theme-color"] = func(internalData *InternalData, content string, extra string) {
-		internalData.metaThemeColor = content
+		if internalData.metaThemeColor == "" {
+            internalData.metaThemeColor = content
+        }
 	}
 
 	matchers["link/icon"] = func(internalData *InternalData, content string, extra string) {
-		internalData.linkFavicon = content
+		if internalData.linkFavicon == "" {
+            internalData.linkFavicon = content
+        }
 	}
 	matchers["link/author"] = func(internalData *InternalData, content string, extra string) {
-		internalData.linkAuthor = content
+		if internalData.linkAuthor == "" {
+            internalData.linkAuthor = content
+        }
 	}
 	matchers["link/alternate"] = func(internalData *InternalData, content string, extra string) {
 		if extra == "application/json+oembed" {
-			internalData.oembedUrl = content
+			if internalData.oembedUrl == "" {
+            internalData.oembedUrl = content
+        }
 		}
 	}
 	matchers["title"] = func(internalData *InternalData, content string, extra string) {
-		internalData.title = content
+		if internalData.title == "" {
+            internalData.title = content
+        }
 	}
 
 	providerMatchers := map[string]func(*InternalData, string, string){}
 
 	providerMatchers["meta/og:site_name"] = func(internalData *InternalData, content string, extra string) {
-		internalData.urlProviderOgSiteName = content
+		if internalData.urlProviderOgSiteName == "" {
+            internalData.urlProviderOgSiteName = content
+        }
 	}
 	providerMatchers["meta/title"] = func(internalData *InternalData, content string, extra string) {
-		internalData.urlProviderMetaTitle = content
+		if internalData.urlProviderMetaTitle == "" {
+            internalData.urlProviderMetaTitle = content
+        }
 	}
 	providerMatchers["meta/theme-color"] = func(internalData *InternalData, content string, extra string) {
-		internalData.urlProviderMetaThemeColor = content
+		if internalData.urlProviderMetaThemeColor == "" {
+            internalData.urlProviderMetaThemeColor = content
+        }
 	}
 	providerMatchers["link/icon"] = func(internalData *InternalData, content string, extra string) {
-		internalData.urlProviderLinkFavicon = content
+		if internalData.urlProviderLinkFavicon == "" {
+            internalData.urlProviderLinkFavicon = content
+        }
 	}
 	providerMatchers["title"] = func(internalData *InternalData, content string, extra string) {
-		internalData.urlProviderTitle = content
+		if internalData.urlProviderTitle == "" {
+            internalData.urlProviderTitle = content
+        }
 	}
 
 	loadData := func(requestedUrl string) (Data, error) {