
As you start to type your search terms , Google Instant automatically shows results for a popular search that begins with those letters . If you do n't see the results you want , just keep typing and the results will dynamically update . Connect to the information you need faster , even before you finish typing your search ! How it works The basics of Google search are the same , including how results are ranked and how Google determines relevant results . What has changed is the path you can take to get to relevant results . Here 's what happens when you search : Start to type . As you type a search on Google , the homepage automatically starts displaying your search results -- no need to press Enter . A list of predicted queries is generated using the autocomplete algorithm . These predictions are displayed in a drop-down menu below the search box . See results . The algorithm tries to predict what the rest of your query might be based on popular queries typed by other users . The first prediction is shown in light grey in the search box , and the search results you see instantly will be for that predicted search . If instead you want to see results for only the text you 've typed , just press Enter or click the Search button . Type more , see more . If you continue to type , Google dynamically updates the search results to match the first prediction for what you 've typed . Refine your search . Do n't find the information or website you want ? It 's easy to refine your search after seeing what results appear . Here are some options : If you see what you 're looking for in the list of predicted queries , click the query to see relevant results . Use your keyboard 's down arrow key to scroll through the list of predicted queries , and see results appear for each query you pause over . Continue typing your query until the results show what you 're looking for . As always , you 're still able to type your full query and press Enter or click the Search button . Why do n't I see results appear as I type ? You wo n't see results appear as you type if any of the following is true : you search from a page that 's not the Google homepage or a search results page you search from your iGoogle page rather than the classic homepage you search using Google SSL you use an Internet browser that 's not one of these supported browsers : Firefox 3 and later versions , Safari 5 for Mac and later versions , Internet Explorer 8 , and Google Chrome 5 and later versions you previously disabled autocomplete you previously opted out of Google Instant you use a Google domain or interface language that does not yet support Google Instant In addition , users on particularly slow Internet connections wo n't see dynamic results since we want to make sure that your search experience is as fast as possible . Learn more about this and similar issues . Lastly , certain types of search queries that may be inappropriate will not trigger results to appear automatically . In these situations , you 'll see a message asking you to click Enter to perform the search . The benefits Get all the benefits of autocomplete and more : Save time -- Get relevant search results while you type so you spend less time searching and can go right to the web content you want . Type less -- Dynamically generated results let you stop typing as soon as you see what you need . We estimate that this will reduce the average number of keystrokes by 9 per search . Search smarter -- Like a conversation with the search engine , get instant feedback on whether your search terms return the type of results you want . If not , just add another word or two to see if the results are closer to what you 're looking for . Learn how to get the most out of Google Instant Can I opt out ? If you do n't want to see results as you type , you can opt out by accessing your search settings under the gear icon on any search results page . When you opt out , we 'll save that preference on a cookie , so you 'll stayed opted out until the cookie is cleared . Note that the preference will only apply to that particular computer and Internet browser , and it is not tied to your Google Account . If you 're concerned about seeing inappropriate content , you can enable SafeSearch at the " strict filtering " level to help avoid sites that contain pornography , explicit sexual content , profanity , and types of hate content . 