Skip to content

Commit a0fe99b

Browse files
authored
Merge pull request #6803 from segmentio/prigiattiperrut-patch-4-1
Update Analytics.js Troubleshooting Info
2 parents a6feac4 + 26e02fd commit a0fe99b

File tree

1 file changed

+2
-114
lines changed

1 file changed

+2
-114
lines changed

src/connections/sources/catalog/libraries/website/javascript/troubleshooting.md

Lines changed: 2 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,6 @@ The JavaScript console reveals all requests, outbound and inbound, to your brows
8484

8585
Alternatively, Segment provides the [Segment Inspector](/docs/connections/sources/catalog/libraries/website/javascript/index.html#segment-inspector), a Chrome web extension designed to enable debugging of your Segment integration in web applications that are instrumented with Analytics.js.
8686

87-
## Is there a size limit on requests?
88-
89-
Yes, 32KB per event message. Events with a payload larger than 32KB are accepted by Analytics.js, with the browser returning a `200` response from the Segment servers, but the event will be silently dropped once it enters Segment's pipeline.
9087

9188
## Analytics.js failing to load due to Ad Blockers or Browser Privacy Settings
9289

@@ -96,32 +93,6 @@ Segment advises against circumventing tracking blockers or browser privacy setti
9693

9794
Due to updates in certain Safari iOS and MacOS versions, Segment's Analytics.js and Destinations tools might experience limitations in capturing query string parameters. As a result, you may notice some events missing campaign information.
9895

99-
## If Analytics.js fails to load, are callbacks not fired?
100-
101-
In the event that Analytics.js does not load, callbacks passed into your API calls do not fire. This is as designed, because the purpose of callbacks are to provide an estimate that the event was delivered and if the library never loads, the events won't be delivered.
102-
103-
## Why do I see a network request to `/m`?
104-
105-
In May 2018, Segment released a change to Analytics.js that collects client-side performance metrics in Analytics.js. This includes metrics like:
106-
107-
- When client side integrations are initialized and when they fail
108-
- When messages are sent to client side integrations and when they fail
109-
110-
Segment added these metrics to proactively identify and resolve issues with individual client-side integrations. These metrics are connected to alerts that notify Segment's on-call engineers to take action on these quickly.
111-
112-
There should be no noticeable impact to your data flow. You may notice Analytics.js make an extra network request in the network tab to carry the metrics data to Segment's servers. This should be very infrequent since the data is sampled and batched every 30 seconds, and should not have any impact of website performance.
113-
114-
## How are properties with `null` and `undefined` values treated?
115-
116-
Segment uses the [`JSON.stringify()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify){:target="blank"} method under the hood. Property values set to `null` or `undefined` are treated in accordance with the expected behaviour for the standard method:
117-
118-
```js
119-
console.log(JSON.stringify({ x: null, y: 6 }));
120-
// expected output: "{"x":null,"y":6}"
121-
122-
console.log(JSON.stringify({ x: undefined, y: 6 }));
123-
// expected output: "{"y":6}"
124-
```
12596

12697
## Why am I seeing a "SameSite" warning?
12798

@@ -133,97 +104,14 @@ Segment correctly sets cookies with the 'SameSite' attribute with Analytics.js.
133104
If you see this warning, it is because you previously visited http://segment.com, and are getting the warning due to unrelated cookies. To verify that this is the issue, visit your page in Incognito Mode and confirm that the warning no longer occurs. Your users won't see this warning unless they _also_ visited http://segment.com.
134105

135106

136-
## Can I overwrite the context fields?
137-
138-
Yes. This can be useful if some of these fields contain information you don't want to collect.
139-
140-
For example, imagine that your website allows users to view a receipt for purchases at the URL `https://mywebsite.com/store/purchases`. Your users click a link that redirects to that specific URL, your app sets a `receiptId` in the query string, and returns the appropriate receipt. You also send a Track call to Segment from this page.
141-
142-
Since this `receiptId` might contain sensitive information, you can prevent the context field `page.url` from being included in your Track call by overwriting the field in the `options` parameter, as in the example below:
143-
144-
```js
145-
analytics.track("Receipt Viewed", {}, {
146-
page: {
147-
url: null
148-
}
149-
})
150-
```
151-
This works for any [context field](/docs/connections/spec/common/#context) that Segment automatically collects.
152-
153-
When working with Page calls, you can overwrite context fields by following the same instructions above. However, because the `context.page` fields are also available in the `properties` parameter for page calls, you must also prevent the same fields in the `properties` parameter from being included in your Page call. The example below will allow you to overwrite `url` available in context field `page.url` and properties parameter:
154-
155-
```js
156-
analytics.page("Receipt Page", {
157-
url: null,
158-
},{
159-
page: {
160-
url: null
161-
}
162-
})
163-
```
164-
165-
166-
## What is the impact of exposing the source's write keys?
167-
168-
For the Segment script to work in the browser, you need to expose the write key in order for client-side tracking to work. Segment's library architecture requires the write key to be exposed, similar to that of other major tools like Google Analytics, Mixpanel, Kissmetrics, Hubspot, and Marketo.
169-
170-
If you see any unusual behavior associated with your write key, you can generate a new key. Navigate to **Connections > Sources** and select your source. On the **Settings** tab, go to the **API Keys** section, and click **Generate New Key**.
171-
172-
If you want to hide the write key, you can use Segment's [HTTP Tracking API source](/docs/connections/sources/catalog/libraries/server/http-api/) or one of the other [server-side libraries](/docs/connections/sources/catalog/#server).
173-
174-
## Can I add context fields that do not already exist?
175-
176-
Yes. Similar to overwriting context, you can add context fields by passing them into the options object as the third argument of the event call. For example, the analytics.js library does not automatically collect location information. To add this into the context object, pass it into the third argument as in the example below:
177-
178-
```js
179-
analytics.track("Order Completed", {}, {
180-
location: {
181-
latitude: '39.7392',
182-
longitude: '104.9903'
183-
}
184-
})
185-
```
186-
187-
> info ""
188-
> You must pass the context object with the call, event if it's empty, as shown by the empty object in the example above.
189-
190-
Some destinations accept properties only. As a result, custom context fields you add may not forward to these destinations.
191-
192107
## Why am I seeing additional cookies on my website?
193108

194109
The AJS cookies being set under segment.com are first-party cookies. They are part of Segment's own implementation as well as the destination Segment uses. These cookies are not related to your implementation of Segment, and you only see them because you've visited Segment's domain using the same browser. They are sent to the writekey connected to Segment's own workspace, and are associated with the events Segment tracks when you visit segment.com.
195110

196-
### Loading with Prototype.js
197-
198-
If you're having issues with your destinations loading with Protoype.js, there is a [known issue that was reported](https://github.com/prototypejs/prototype/issues/338){:target="_blank"} regarding this.
199-
200-
In order to prevent the issues, you can preserve the original `Array.from` method without letting the prototype override it.
201-
202-
## Will Google Chrome's third-party cookie changes impact Segment Analytics.js?
203-
204-
No, Analytics.js isn't affected by this change. This is because Analytics.js only creates first-party cookies. Unlike third-party cookies, which are set by external services and blocked by the [new Chrome update](https://developers.google.com/privacy-sandbox/3pcd){:target="_blank"}.
205-
206-
Regarding cookies set by [device-mode destinations](/docs/connections/destinations/#connection-modes), it's important to note that Segment's primary function is to load third-party SDKs and forward events to them. As a result, the usage and management of cookies are entirely at the discretion of each individual SDK. For instance, if you have concerns about destinations setting third-party cookies, it's best to consult directly with the destination providers for detailed information. For example, Amplitude, one of the destinations in the Segment catalog, offers [more information on this topic](https://www.docs.developers.amplitude.com/guides/cookies-consent-mgmt-guide/#frequently-asked-questions){:target="_blank"}.
207-
208-
## How is the referrer value set?
209-
210-
The Analytics.js library sets the `context.page.referrer` value from the `window.document.referrer` [property](https://developer.mozilla.org/en-US/docs/Web/API/Document/referrer){:target="_blank"} set in the browser. If you notice unexpected referrer values reaching Segment, check how this value is being set on your website.
211-
212-
## Does Segment support using strict Content Security Policy (CSP) on the page?
213-
214-
If you're using a security policy that allows JavaScript downloads from specific locations using nonces, then you'll need to update the CSP to include all Segment domains. In addition to allowing the main `analytics.min.js` script, you should also allow the following paths in your CSP:
215-
- `https://cdn.segment.com/v1/projects/<WRITE_KEY>/settings`
216-
- `https://cdn.segment.com/analytics-next/bundles/*`
217-
- `https://cdn.segment.com/next-integrations/integrations/*`
218-
219-
Your CSP may also require allowlisting approved domains, in which case you'll want to allow the following endpoints:
220-
- `api.segment.io`
221-
- `cdn.segment.com`
111+
### Known Incompatibilities with Prototype.js
222112

223-
You'll also need to modify the Segment script with your `nonce` tag, which should match the value specified in your Content Security Policy.
113+
If you're having issues with your destinations loading with Prototype.js, there is a [known issue that was reported](https://github.com/prototypejs/prototype/issues/338){:target="_blank"} regarding this. In order to prevent the issues, you can preserve the original `Array.from` method without letting the prototype override it.
224114

225-
> info ""
226-
> Since Segment interacts with several integrations, support surrounding Content Security Policy issues is limited.
227115

228116
## Why am I getting an empty campaign object in my event payload?
229117

0 commit comments

Comments
 (0)